覆盖克隆方法 - 不工作(Java)

Ult*_*ent -1 java clone deep-copy

我正在编写一个搜索算法来解决java中的15个难题.当我克隆谜题状态以产生新的可能动作(女儿)时,它们仍然相互改变而不是分开.

这是我的克隆方法:

public FifteenPuzzleState clone() throws CloneNotSupportedException
{
FifteenPuzzleState copy = (FifteenPuzzleState)super.clone();
for(int i=0; i<copy.currentConfig.length; i++){
    copy.currentConfig[i] = Arrays.copyOf(currentConfig[i], currentConfig[i].length);
}
return copy;     
} 
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,在克隆状态然后改变它之后,它也会影响先前的状态和所有其他克隆.我的第一个想法是我没有正确创建2d数组的深层副本,但我发现上面的代码没有任何问题.

有什么建议?谢谢

SLa*_*aks 5

你是对的.您需要通过手动clone()输入数组中的每个元素来制作深层副本.