java - libgdx 中的 arraylist 出现错误

标签 java android for-loop arraylist libgdx

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/

相关文章:

java - 使用 nativeQuery = true 在 JPA Reposity 中执行 @Query 时出现 ResultSet 错误

java - 连字符混合单词的正则表达式

android - 尝试在 Google Map V2 上放置标记时出现 NullPointerException

php - PHP的购物车没有通过一个以上的项目发送到 Paypal

java - for循环中增量整数不会增加2

java - 将带有彩色边框的 JPanel 按特定顺序放置,使它们看起来像网格

java - Deltaspike 替代 TransactionStrategy 问题

java - 如何在Java中连接后设置XML字符串?

android - SQLite 子查询不工作

php - 额外变量或对象创建——PHP 中什么更好?