for (Rectangle block:getBlock()) {
for (Rectangle done:getDone()){
if (block.y == done.y + 40) {
dones.add(block);
blocks.remove(block);
create();
}}
所以我试图为数组列表“ block ”和“完成”中的每个矩形获取位置 y,但我真的不知道当我运行此代码时会发生什么,它就像它一样工作,直到 if (block.y == done.y + 40)
这成真了,我得到了这个异常:
Exception in thread "LWJGL Application" java.util.ConcurrentModificationException
附:在创建方法中,我将矩形添加到 block 数组列表中
最佳答案
使用增强的 for 循环,您可以在内部使用 List
对象的迭代器。
在迭代基础列表时不允许修改它。这称为 ConcurrentModificationException
,就是您现在遇到的情况。
使用标准的 for 循环,并确保在删除元素时正确移动索引以获得所需的功能,如下所示:
ArrayList<Rectangle> blocks = getBlock();
ArrayList<Rectangle> done = getDone();
outer: for(int i = 0; i < blocks.size(); ++i)
{
for(int j = 0; j < done.size(); ++j)
{
if(blocks.get(i).y == done.get(j).y + 40)
{
done.add(blocks.get(i));
blocks.remove(i);
--i; // Make sure you handle the change in index.
create();
continue outer; // Ugly solution, consider moving the logic of the inner for into an own method
}
}
}
关于java - libgdx 中的 arraylist 出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50987809/