2012-05-11 2 views
-1

私はjavaの15の問題を解決するための検索アルゴリズムを書いています。 パズルの状態をクローンして、新しい可能な動き(娘)を生成するとき、それらは別々になるのではなく、お互いを変えます。クローンメソッドをオーバーライドする - 動作しない(Java)

は、ここに私のcloneメソッドです:

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

あなたは正しいです。配列内の各要素を手動で深くコピーする必要があります。

関連する問題