2016-12-18 5 views
0

4×4アレイの水平ミラーを作成する方法と、90度アレイを右側に回転する方法を作成しました。ミラーメソッドは機能しませんが、メソッドは関数を実行して、なぜミラーメソッドが機能しないのか分かりません。Java配列の配列コピー上のブールエラーと、それ以外の理由は何ですか?

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であります行。あなたの目的のためには、各行の先頭を最後までコピーする必要があります。

ので、実際のコードは次のようになります。

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

サイドノート:あなたが望むかもしれないjは0

これを行うときにtabTemp[i][k] = tab[i][j]

はまた、あなたはケースをスキップしています変数名をよりわかりやすいものにする。

0

私は理解カントあなたのコード。私はこの行列の鏡がこの行列の左部分と右部分とを入れ替わっていると思う。その後、次のコードを参考にしてください。

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

出力:[] [] ARR

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(); 
    } 
} 

入力

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

回転コードは問題なく動作します。それはちょうどworktときに私のコードの例のためです。問題は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

関連する問題