Java问题是复制数组列表值

时间:2015-10-17 04:24:24

标签: java arrays reference copy clone

我是新来的,但是我已经搜索了这个问题的解决方案了几个小时,尽管我找到了一些答案,但它们都没有真正起作用。

我有一个名为“parent”的数组列表(在这种情况下是一个节点),类型为“State”(排列在棋盘中的8个皇后)。我这样声明:

ArrayList<State> parents = new ArrayList<State>(3);

同样,我有一个像这样声明的“子”数组:

ArrayList<State> children = new ArrayList<State>(7);

我必须重新排列棋盘的状态,这样我就没有任何位置可以使用Beam Search方法相互攻击。要做到这一点,我必须将父母的状态复制到孩子身上,随机重新排列孩子中的女王并检查他们状态下的攻击次数是否降低,冲洗并重复直到我得到0次攻击(或者算法有在没有找到比上一个更好的状态的情况下进行了很长时间。)

最后,在问题的“情境化”之后,让我们转到问题本身。

每当我更改处于子状态的处女王的位置时,它也会在父状态中更改,即使我尝试了很多变通方法来将对象从ArrayList传递到另一个而不复制引用。现在,我这样做:

ArrayList <State> buffer = new ArrayList<State>(parents);
children.add(buffer.get(m)); //the m here is just so I can choose in a for witch parent will be copied to the children array

然后我正在改变这样的女王价值(不完全是这样,但实际的代码需要更多的语境化,我会更加偏离问题:

children.get(k).board[queen]=k;//basically changing the "Y" position of the queen to a "k" value that comes from a loop.

当我在这样的子女状态下更改女王的值时,父状态也会改变,这是我不能为我的生活修复的,我尝试使用之前找到的一些答案我发了这篇文章,就像使用克隆方法一样:

buffer=(ArrayList<State>) parents.clone();

或Collections.copy方法:

ArrayList<State> buffer = new ArrayList<State>(3);
Collections.copy(buffer, parents);//actually this one gives me an out of bounds error, stating that the source does not fit in the destiny

和其他一些人,但都无济于事,父值仍然会被修改。

有没有人知道可以采取哪些措施来解决这个问题?或者我是否以无法修复的方式解决问题?我也是Java的新手,所以有可能我在之前找到的解决方案中遗漏了一些东西,所以如果有人确实其中一种方法必须在我的情况下工作,一定要,解释一下,我会再次尝试使用它。

(另外,我试图以更好的方式“建立”帖子,如果有人对将来如何提出我的问题有任何建议,也欢迎他们)

干杯:)

0 个答案:

没有答案