gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:28:07 25 4
gpt4 key购买 nike

这是我的代码:

  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 的棋盘,我试图计算棋盘游戏中的最佳着法。

当我找到一个同样好的 Action 列表时,我想检查对手给出了我可以做的不同 Action 的可能性。所以我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()

关于java - 在 java 中克隆和编辑 int[][] - 无法更改 int[][],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7930963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com