Android 尝试从ArrayList中删除对象时崩溃

Android 尝试从ArrayList中删除对象时崩溃,android,object,crash,arraylist,Android,Object,Crash,Arraylist,我有一个问题,我还没有找到解决办法。我正在做一个小游戏,如果与另一个名为“球”的对象碰撞,sball数组列表中的对象将被删除。 我遇到的问题是,当冲突发生时,当我试图从ArrayList中删除对象时,应用程序崩溃 for(GObject sballgraphic : _sballs){ Coordinates sballcoords = sballgraphic.getCoords(); if(coords.getY() - coords._hei

我有一个问题,我还没有找到解决办法。我正在做一个小游戏,如果与另一个名为“球”的对象碰撞,sball数组列表中的对象将被删除。 我遇到的问题是,当冲突发生时,当我试图从ArrayList中删除对象时,应用程序崩溃

for(GObject sballgraphic : _sballs){
            Coordinates sballcoords = sballgraphic.getCoords();
            if(coords.getY() - coords._height > sballcoords.getY() + sballcoords._height && coords.getX() - coords._width > sballcoords.getX() + sballcoords._width){
                _sballs.remove(sballgraphic);
            }
        }
因此,代码将球坐标与所有sball对象进行比较,以检查是否存在碰撞,然后尝试移除sball


这里有什么问题?:)

您无法执行此操作,因为您正在修改您正在迭代的同一个
\u sball

ArrayList<GObject> _sballs;
ArrayList<GObject> _sballsForRemove;

for(GObject sballgraphic : _sballs){
            Coordinates sballcoords = sballgraphic.getCoords();
            if(coords.getY() - coords._height > sballcoords.getY() + sballcoords._height && coords.getX() - coords._width > sballcoords.getX() + sballcoords._width){
                _sballsForRemove.add(sballgraphic);
            }
        }
_sballs.removeAll(_sballsForRemove);
ArrayList\u sball;
ArrayList_sballsforemove;
用于(GObject sball图形:_sball){
坐标sballcoords=sballgraphic.getCoords();
如果(coords.getY()-coords.\u height>sballcoords.getY()+sballcoords.\u height&&coords.getX()-coords.\u width>sballcoords.getX()+sballcoords.\u width){
_sballsforemove.add(sballgraphic);
}
}
_移除所有(移除所有);
我猜“崩溃”是一个
ConcurrentModificationException

之所以发生这种情况,是因为您试图在使用迭代器(增强for的内部工作方式)对集合进行迭代时从集合中删除

你的选择是:


  • 使用索引(旧式
    for(i=0;来自logcat的ipost堆栈跟踪)进行迭代。这是正确的答案,我会选择选项2,因为我觉得它是最健壮、最干净的解决方案。