2014-02-16 67 views
0

我正在爲我的計算機科學實驗室製作一個名爲Numbrosia的遊戲。它必須是一個5x5板,但是當我嘗試將行內的值向右或向左移動時,我的一些列消失。在Java中移動一個二維數組中的行

數組的價值觀是

1 -2 1 0 0 
-1 0 4 2 0 
0 -4 1 -1 0 
0 1 -1 -1 -2 
0 -3 1 -1 0 

但我正在逐漸

0 0 1 -2 
0 2 4 0 
0 -1 1 -4 
0 -1 -1 1 
0 -1 1 -3 

我就把它移到右邊

public public static void RowRight(int i, int[][] array){ 
    for(int row = 0; row < array.length; row++){ 
     int temp = array[i][array.length-1]; 
     for(int col = array.length-2; col > 0; col--){ 
      array [row][col+1] = array[row][col]; 
      System.out.print(array[row][col] + " "); 
     } 
     System.out.println(""); 
    } 
}  

我的方法的代碼我的作品等待別人的回覆謝謝

---------- UPDATE -----------------------------

我已經管理打印5列,但出現了一個新問題。如果我將該行中的值向左或向右移動,則最後一個數字(當向左移動時是第一個數字)旁邊的位置或第一個數字(當右移是最後一個數字時)具有與第一個或最後一個相同的確切數字。 我會把輸出

再次數組的值是

1 -2 1 0 0 
-1 0 4 2 0 
0 -4 1 -1 0 
0 1 -1 -1 -2 
0 -3 1 -1 0 

,我需要得到例如第一行向左移動,所以它應該打印

-2 1 0 0 1 
-1 0 4 2 0 
0 -4 1 -1 0 
0 1 -1 -1 -2 
0 -3 1 -1 0 

但我越來越

-2 1 0 1 1 
-1 0 4 2 0 
0 -4 1 -1 0 
0 1 -1 -1 -2 
0 -3 1 -1 0 

我該如何解決這個問題?

+0

您通常會將行向右或向上移動,您是什麼意思將它們左右移動? –

+0

@ peter.petrov - 我認爲這意味着將值左右移動一行。 –

+0

如果您只想移動一行,則不需要兩個嵌套循環。看到我更新的答案。 –

回答

1

你沒有對temp做任何事情,所以它的價值會丟失。你可能想要這樣的東西:

for(int row = 0; row < array.length; row++){ 
    int temp = array[i][array.length-1]; 
    System.out.print(temp + " "); 
    for(int col = array.length-2; col >= 0; col--){ 
     array [row][col+1] = array[row][col]; 
     System.out.print(array[row][col] + " "); 
    } 
    array[row][0] = temp; 
    System.out.println(""); 
} 
+0

對不起,這是我的錯誤,我改變它有溫度,仍然給我出相同的結果。 – Jules

+0

@ user2958626 - 我將循環終止條件從'col> 0'改爲'col> = 0'。看看這是否有所作爲。如果沒有,請編輯您的具體示例(包括值和輸出)以顯示錯誤。 –

1

你可以如下移動行#i向右/向左移動。

import java.util.Arrays; 

public class Test037 { 

    public static void main(String[] args) { 
     int[][] x = 
     { 
      { 1, 2, 3, 4, 5, 6, 7 }, 
      { 1, 2, 3, 4, 5, 6, 7 }, 
      { 1, 2, 3, 4, 5, 6, 7 }, 
      { 1, 2, 3, 4, 5, 6, 7 } 
     }; 

     System.out.println(Arrays.deepToString(x)); 

     shiftRight(0, x); 
     System.out.println(Arrays.deepToString(x)); 

     shiftLeft(0, x); 
     System.out.println(Arrays.deepToString(x)); 

     shiftLeft(0, x); 
     System.out.println(Arrays.deepToString(x)); 
    } 

    /** 
    * Shifts row #i one position to the right. 
    */ 
    public static void shiftRight(int i, int[][] array) { 
     int m = array[i].length; 
     int temp = array[i][m-1]; 
     for (int k=m-1; k>=1; k--){ 
      array[i][k] = array[i][k-1]; 
     } 
     array[i][0] = temp; 
    } 

    /** 
    * Shifts row #i one position to the left. 
    */ 
    public static void shiftLeft(int i, int[][] array) { 
     int m = array[i].length; 
     int temp = array[i][0]; 
     for (int k=0; k<m-1; k++){ 
      array[i][k] = array[i][k+1]; 
     } 
     array[i][m-1] = temp; 
    } 

} 
+0

我正在嘗試實施轉向柱http://paste.ubuntu.com/12901624/這是正確的嗎? –

0

這段代碼將解決您的問題。

private static void RowRight(int shiftRow, int[][] array){ 
    if(array.length != 0 && array[0].length != 0){ 
     // to check for empty arrays 

     int temp = array[shiftRow][array[shiftRow].length - 1]; 

     for(int col = 1; col < array[shiftRow].length; col++){ 
      array[shiftRow][col] = array[shiftRow][col - 1]; 
     } 

     array[shiftRow][0] = temp; 
    } 

    traverse(array); 
}  

private static void traverse(int a[][]) { 
    for (int i = 0; i < a.length; i++) { 
     for (int j = 0; j < a[i].length; j++) { 
      System.out.print(a[i][j] + " "); 
     } 
     System.out.println(); 
    } 
}