-3

在这个 android 游戏中,我使用 ArrayList 来跟踪当前屏幕上的所有实体。运行列表允许我成功更新实体并将其添加到屏幕/列表,但尝试删除它们会给我一个 java.util.ConcurrentModificationException 错误。我是新手程序员,所以我真的不知道会出现什么问题。

我用来确定何时需要删除实体的方法(当它离开屏幕时,但只能通过顶部)就是这样。

private void deleteEntities() {
    for(Entity ent : entsOnLevel) {
        if((ent.getY() + ent.getImage().getHeight()) < 0) {
            this.entsOnLevel.remove(ent);
        }
    }
}

有人可以向我解释可能出了什么问题吗?

4

3 回答 3

3

您创建了一个迭代器并且您正在删除他的当前项目,因此他找不到下一个项目。

在此处阅读更多信息-> ConcurrentModificationException?

于 2013-08-23T08:39:43.283 回答
2

您应该使用Iterator从 List 中删除一个元素。

    Iterator<YourDataType> it = YourList.iterator();
    while (it.hasNext()) 
           it.remove();

应该给你一些提示,为什么你应该使用迭代器。

于 2013-08-23T08:40:29.677 回答
1

你正面临ConcurrentModificationException ,因为你同时做两个操作list。即同时循环和删除。

为了避免这种情况使用迭代器,它保证你从列表中安全地删除元素......

前任:

List<Object> objs;
Iterator<Object> i = objs.iterator();
while (i.hasNext()) {
   Object o = i.next();
  //some condition
    i.remove();
}
于 2013-08-23T08:41:03.743 回答