2012-05-11 79 views
-1

我正在寫一個搜索算法來解決Java中的15個難題問題。 當我克隆難題狀態以產生新的可能動作(女兒)時,他們仍然彼此改變,而不是分開。覆蓋克隆方法 - 不工作(Java)

這裏是我的克隆方法:

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

對象的哪部分受到克隆變更的影響?沒有自動深度複製,因此您需要確保克隆所有內容。 – ChristopheD

+0

如果你想要一個深度克隆,你必須自己照顧,對不起。 –

回答

5

你是對的。您需要手動對數組中的每個元素進行深度複製。