为了账号安全,请及时绑定邮箱和手机立即绑定

将列表 1 添加到列表 2 并更新列表 1 而不影响列表 2

将列表 1 添加到列表 2 并更新列表 1 而不影响列表 2

守着星空守着你 2022-09-22 19:58:26
我正在制作一个棋盘游戏,目前正试图将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()}}}}如果我的玩家被两个邻居包围,我希望强制播放的输出看起来像例如:[[2,1],[4,3]],但它看起来像[[],[]]。所以我不明白的是,如何将list1添加到list2,然后切断它们之间的联系,这样当我清除list1时,它就不会清除list2?
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

您可以在添加 之前创建 的副本。forcedPlay

forcedPlays.add(new ArrayList<Integer>(forcedPlay));

这样,对 所做的更改不会影响添加到外部列表的列表。forcedPlay


查看完整回答
反对 回复 2022-09-22
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

您正在复制引用。基本上,list1 指向 list2 的一些元素。您需要将 list1 中的元素副本克隆添加到列表 2 中。


查看完整回答
反对 回复 2022-09-22
  • 2 回答
  • 0 关注
  • 66 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信