2011-10-28 10 views
4

を変更することはできませんこれは私のコードです:クローニングおよび編集intが[] [] Javaで - のint [] []

public Move makeMove(int[][] board) 

(...もっとコード...)

int[][] nextMove = board.clone(); 
    nextMove[i][j] = 1; 
    int nextMaxMove = maxMove(nextMove);   

    System.out.println(next max move: " + nextMaxMove + " " + maxMove(board) ); 

int[][] boardは8x8ボードであり、ボードゲームで最良の動きを計算しようとしています。

私が等しく良い動きのリストを見つけたら、相手が私ができるさまざまな動きをどのような可能性を持っているかチェックしたいと思います。だからclone()board、クローンnextMove[i][j] = 1を編集して、新しいボードのmaxMove関数を呼び出します。 nextMoveが変わらないように思え..

のprintlnはデバッグ用です、と私はmaxMove(nextMove);maxMove(board)に同じ結果を得る、これは間違って..です

+0

'Arrays.copyOf'を使用してください。 – Laf

+2

おそらくあなたのmaxMove関数が間違っていることを意味します... –

+0

nextMoveボードの内容を変更したかどうかを確認したり、デバッガで調べたりすることをお勧めします。 –

答えて

2

あなたのデータ構造は、配列の配列であるためです - これは、フードの下で、一連の参照です。あなたのクローンはの浅いコピーなので、元の配列がクローンに含まれています。 このサンプルコードはそれを示しています。

int[][] x = new int[][] { { 1,3 }, { 5,7 } }; 
    int[][] copyOfX = x.clone(); 
    copyOfX[1][1]=13; 

    for (int i = 0; i < 2; i++) 
    { 
     System.out.println(x[i] + "/" + copyOfX[i]); 
     for (int j = 0; j < 2; j++) 
     { 
      System.out.println(x[i][j] + "/" + copyOfX[i][j]); 
     } 
    } 

ソリューションは、明示的ではなく.clone()を使用するよりも、あなたの2次元配列の内容をコピーすることです。

関連する問題