修改int列表的arraylist中的int

bqujaahr  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(357)

在处理过程中,我试图创建一个intlist的arraylist,这样arraylist中的元素的初始数目就可以改变(但我不会在代码中更改它),而intlist中的元素的数目最初是0,但会添加到代码中并在代码中进行编辑。我的代码是一个日本梯形图游戏,其中arraylist是一组梯形图,每个梯形图都有一个包含“rungs”的intlist,rungs是对应于梯形图上y位置的int组件。

ArrayList <IntList> Ladders = new ArrayList <IntList>();
IntList temp = new IntList();

void setup()
{
  for(int i=0;i<numRails-1;i++)
  {
    Ladders.add(new IntList());
    temp.clear();
    temp.append(0);
    Ladders.set(i,temp);
  }
}
void addRung (int spot)
{
  temp.clear();
  temp = Ladders.get(spot);
  temp.append(50);
  //note that 50 is an arbitrary number, it would be given by MouseY
  Ladders.set(spot,temp);
  print(Ladders);

  //I have also tried...
  Ladders.get(spot).append(50);
}

所以我的问题是addrung()似乎给arraylist的每个元素加了50,“print(ladders);”输出。。。

[IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ], IntList size=1 [ 50 ]]

有没有更好的办法完全解决这个问题,还是我做错了什么?
我包括了我的代码输出的图像。。。位置50处应为单横档,但位置50处为9横档。

hmtdttj4

hmtdttj41#

请仔细考虑这段代码到底在做什么:

for(int i=0;i<numRails-1;i++)
  {
    Ladders.add(new IntList());
    temp.clear();
    temp.append(0);
    Ladders.set(i,temp);
  }

在这里你要添加一个新的 IntList 给你的
Ladders ArrayList . 那你就清场了 temp 和添加 0 然后设置索引(您刚刚添加了一个新的 IntListtemp ,它取代了新的 IntList 你刚刚加了一句。
换句话说,你在添加 temp 所有的索引 ArrayList . 那只是一堆相同的参考资料 IntList ,这就是为什么向一个索引添加值时,它会向每个索引添加值。
要解决这个问题,你需要把你的 temp 完全可变。只需添加一个新的 IntList ,然后使用 get() 函数来获取 IntListArrayList . 它看起来是这样的:

ladders.get(index).append(value);

顺便说一句,您应该养成在提问之前调试代码的习惯。一些打印出来的声明会大大有助于你弄清楚发生了什么。如果你被卡住了,你可以发布一个mcve而不是断开连接的片段。
您还应该尝试使用标准的命名约定:变量应该以小写字母开头。

相关问题