在java中克隆和编辑int [] [] - 无法更改int [] []

时间:2011-10-28 14:54:45

标签: java arrays multidimensional-array int clone

这是我的代码:

  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函数。

println用于调试,我得到maxMove( nextMove );maxMove( board )的相同结果,这是错误的..似乎nextMove保持不变..

1 个答案:

答案 0 :(得分: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()