在处理过程中,我试图创建一个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横档。
1条答案
按热度按时间hmtdttj41#
请仔细考虑这段代码到底在做什么:
在这里你要添加一个新的
IntList
给你的Ladders
ArrayList
. 那你就清场了temp
和添加0
然后设置索引(您刚刚添加了一个新的IntList
至temp
,它取代了新的IntList
你刚刚加了一句。换句话说,你在添加
temp
所有的索引ArrayList
. 那只是一堆相同的参考资料IntList
,这就是为什么向一个索引添加值时,它会向每个索引添加值。要解决这个问题,你需要把你的
temp
完全可变。只需添加一个新的IntList
,然后使用get()
函数来获取IntList
从ArrayList
. 它看起来是这样的:顺便说一句,您应该养成在提问之前调试代码的习惯。一些打印出来的声明会大大有助于你弄清楚发生了什么。如果你被卡住了,你可以发布一个mcve而不是断开连接的片段。
您还应该尝试使用标准的命名约定:变量应该以小写字母开头。