我正在编写一个搜索算法来解决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数组的深层副本,但我发现上面的代码没有任何问题。
有什么建议吗? 感谢
答案 0 :(得分:5)
你是对的。您需要通过手动clone()
数组中的每个元素来制作深层副本。