2017-12-11 7 views
-1

私はJavaでコンソール2048ゲームを作ろうとしていますが、ボードの回転を右に90度回転したいと思います。 Webを実装して関数を実装しましたが、すべての行と列をスワップしていないので、誰かが私が書いた内容を見直して、コード内の実際のエラーを特定するのに役立ちます。N * N行列を右に9度回転する

public static void rotation90Droite(int [][] vals) { 

    int e = vals.length-1; 
    int c = e/2; 
    for (int i = 0; i <= c ; i++) { 
     for (int j = i; j <e - i; j++) { 
      int t = vals[i][j]; 


      vals[i][j] = vals[e - j][i]; 

      vals[e - j][i] = vals[e - i][e - j]; 

      vals[e - i][e - j] = vals[j][e - i]; 

      vals[j][e - j] = t; 
     } 
    } 
} 
public static void printMatrix(int[][] Matrix) { 

    for(int i = 0; i < Matrix.length; i++) { 
     for (int j = 0; j < Matrix.length; j++) { 
      System.out.print(Matrix[i][j]+ " "); 
     } 
     System.out.println(" "); 
    } 
} 


public static void main(String[] args) { 

    int[][] vals = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}} ; 
    printMatrix(vals); 
    System.out.println(" "); 
    rotation90Droite(vals); 
    printMatrix(vals); 

    } 
} 

これは実際には最初の行は、最後の列になって確認する必要があり、最後の列は、など最後の行になる...私は実際に取得しています何

は次のとおりです。

1 2 3 4 
5 6 7 8 // Starting matrix 
9 10 11 12 
13 14 15 16 

13 9 5 1 
14 3 6 8 // end matrix 
15 11 2 12 
16 12 8 4 

として、あなたは正しくスワップされた最後の行を見ることができますが、多くの値が正しい場所にないので、私はなぜ見つけることができません。どんな助けもありがとうございます。事前にお礼を言います。

+0

ローテーションやトランスポーズが必要ですか? –

+0

デバッガは、プログラムがどこに間違っているかを見つけるのに非常に役立ちます。 – Henry

答えて

0

このような幾何学的な問題は、通常どのように配列の要素にアクセスするかのパターンを持っています。あなたが使用しているインデックスを読んでいる場合、あなたのループの最後の割り当てはかなりのパターンと一致していません:

vals[j][e - j] = t; 

は次のようになります。

vals[j][e - i] = t; 

ここworking demoです。将来のために


learning to use a debuggerは、これらの種類の問題を解決するための非常に貴重なツールとなるでしょう。

+0

あなたの答えをありがとう、それは私の問題を解決! どのように私はそれを逃したのか分かりません –

+0

@ EdoYouss投稿があなたの質問に答えた場合は、[回答としてマークする](https://stackoverflow.com/help/someone-answers)を検討してください。 – hnefatl

関連する問題