我正在做一个棋盘游戏,目前正在尝试将所有周围的邻居以2D数组的形式保存为列表中的列表。我遇到的问题是,当我将list1保存到list2,然后继续进行迭代并将list1更改为其他名称时,它也影响了list2,因此我失去了另一个邻居的值。
这是我尝试过的:
private ArrayList<ArrayList> forcedPlays = new ArrayList<ArrayList>();
private ArrayList<Integer> forcedPlay = new ArrayList<Integer>();
private void findNeighbors(){
for (int y = -1; y <=1 ; y+=2) {
for (int x = -1; x <= 1; x+=2) {
if (board[myY+y][myX+x]!=null){
enemyY = myY+y;
enemyX = myX+x;
forcedPlay.addAll(Arrays.asList(
Integer.valueOf(enemyY),
Integer.valueOf(enemyX)));
forcedPlays.add(forcedPlay);
forcedPlay.clear()}}}}
如果我的玩家被两个邻居包围,那么我会期望forcePlay的输出看起来像:[[2,1],[4,3]],但是看起来像[[],[] ]。所以我不明白的是如何将list1添加到list2,然后断开它们之间的连接,所以当我清除list1时,不会清除list2吗?
答案 0 :(得分:1)
您可以先添加forcedPlay
的副本。
forcedPlays.add(new ArrayList<Integer>(forcedPlay));
通过这种方式对forcedPlay
进行的更改不会影响添加到外部列表的列表。
答案 1 :(得分:0)
您正在做参考副本。基本上list1指向list2的某些元素。您需要将list1中的元素副本(副本)添加到list2。