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

时间:2012-05-11 21:28:54

标签: 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;     
} 

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

有什么建议吗? 感谢

1 个答案:

答案 0 :(得分:5)

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