克隆和编辑int[][]不能更改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的功能在新的板。

println是为了调试,我得到maxMove( nextMove );maxMove( board )相同的结果,这是错误的。看起来nextMove没有改变。

发生这种情况是因为您的数据结构是一个数组的数组-它实际上是一个引用数组。您的克隆是一个副本,因此克隆包含原始数组。下面的示例代码演示了它。

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

相关内容

  • 没有找到相关文章

最新更新