2016-12-18 13 views
0

我創建了一個方法來做一個4乘4陣列的水平鏡面,而另一個方法則是向右旋轉90度陣列。鏡像方法不起作用,但方法運行功能,我不明白爲什麼鏡像方法不起作用。Java array數組上的布爾錯誤在一個上覆制而不在另一個上爲什麼?

public void miroirPiece(int pieceSel){ 
    if(pieceSel!=-1){ 
     boolean[][] tabTemp = new boolean[4][4]; 
     int k=0; 
     for (int i = 0; i < 4; i++) { 
      for (int j = 3; j !=0; j--) { 
       tabTemp[k][j]=tab[i][j]; 
       k++; 
      } 
      k=0; 
     } 
     rePositionPiece(tabTemp); 
    } 
} 

public void rotate(int selectedPiece) { 

    if (selectedPiece != -1) { 
     int size = 4; 
     boolean[][] tabTemp = new boolean[size][size]; 
     for (int i = 0; i < size; i++) { 
      for (int j = 0; j < size; j++) { 
       tabTemp[size - 1 - j][i] = tab[i][j]; 
      } 
     } 
     rePositionPiece(tabTemp); 

    } 
} 

我的數據數組:

true true true true 
true false false false 
false false false false 
false false false false 

這是我有miror方法之後

false false false false 
false false false false 
false false false false 
false false false false 

這是預期的結果:

true true true true 
false false false true 
false false false false 
false false false false 
+0

請僅以英文發佈。 –

+0

非常感謝這次培訓。 – vins20021

+0

你能發佈預期的和實際的輸出嗎? – user7

回答

0

這是代碼的故障區段:

for (int j = 3; j !=0; j--) { 
    tabTemp[k][j] = tab[i][j]; 
    k++; 
} 

i是行。爲了您的目的,您需要將每一行的前面複製到結尾,反之亦然。

所以,實際的代碼應該是:tabTemp[i][k] = tab[i][j]

此外,你跳的情況下,當j爲0

這樣做:

for (int j = 3; j >= 0; j--) { 
    tabTemp[i][k] = tab[i][j]; 
    k++; 
} 

旁註:你可能想使變量名稱更具描述性。

0

我無法理解你的代碼。我認爲這個矩陣的鏡像是交換矩陣的左邊部分和右邊部分。那麼後面的代碼可能會有幫助。

public void miroirPiece(boolean[][]arr) { 
    int left = 0, right = arr.length-1; 
    while(left<right){ 
     for(int row = 0; row < arr.length;row++){ 
      boolean temp = arr[row][left]; 
      arr[row][left] = arr[row][right]; 
      arr[row][right] = temp; 
     } 
     left++; 
     right--; 
    } 
    for(int row=0; row < arr.length;row++){ 
     for(int col = 0; col < arr[row].length;col++){ 
      System.out.print(arr[row][col]+" "); 
     } 
     System.out.println(); 
    } 
} 

和ARR [] []輸入:

true true true true 
true false false false 
false false false false 
false false false false 

輸出:

true true true true 
false false false true 
false false false false 
false false false false 
+0

那麼旋轉代碼工作正常,不是問題。這只是我工作時代碼的例子。問題是miroirPiece方法....它不工作。當我做的時候:tabTemp [k] [j] = tab [i] [j];它不是workt – vins20021

+0

vins20021我的代碼實現了你的'miroirPiece方法'的功能,而不是'旋轉'。而你的'miroirPiece'只爲tabTemp [0] [3] tabTemp [1] [2] tabTemp [2] [1]賦值。你可以調試它。 –

+0

非常感謝cainiaofei! – vins20021

相關問題