Java 相交后从arraylist中远程删除项

Java 相交后从arraylist中远程删除项,java,arraylist,Java,Arraylist,我正在做一个游戏项目。到目前为止还不错,但我只是停留在一些基本的事情上,我无法找到一个解决方案,使它正常工作。我决定来这里问你一些建议 问题: 当玩家接触到钻石时,我想从关卡和包含世界上所有物体的阵列列表中移除钻石。调用remove()方法后,我会收到一条异常错误消息 代码: 1.使用列表初始化:编辑_1 private ArrayList<AbstractObject> objects = new ArrayList<AbstractObject>();

我正在做一个游戏项目。到目前为止还不错,但我只是停留在一些基本的事情上,我无法找到一个解决方案,使它正常工作。我决定来这里问你一些建议

问题:

当玩家接触到钻石时,我想从关卡和包含世界上所有物体的阵列列表中移除钻石。调用remove()方法后,我会收到一条异常错误消息

代码: 1.使用列表初始化:编辑_1

   private ArrayList<AbstractObject> objects = new ArrayList<AbstractObject>(); 

    public void removeObject(String name){           
    ArrayList<AbstractObject> newest = new ArrayList<AbstractObject>();
    ListIterator<AbstractObject> delete=objects.listIterator();
    while(delete.hasNext()){
        if(name.equals(delete.next().getName())){
            delete.remove();
        }
        else{
            delete.previous();
            newest.add(delete.next());
        }
    }
    objects=newest; 
}
我查看了一些从arraylist中删除项的示例,但没有发现区别

编辑_1: 所以我想出了办法,但我总是会出错。我编辑了removeobject代码块。这在我为测试创建的中立列表中效果很好。我把所有我不想删除的项目放到一个新的列表中,而不是用最新的一个来写旧的arraylist。它毫无例外地工作了。当我对游戏列表做同样的操作时,我想编辑它,但抛出了同样的错误。 如果可能有问题,我也会把渲染代码放在那里

public void render(Graphics g) {
    if(menu.getChoice()==-1){
        menu.render(g);
    }
    else if(menu.getChoice()==0){
        g.setColor(Color.white);
        for(AbstractObject tempObj : objects){
            tempObj.render(g);
        }
    }                
}
固定的:
我将更改起始列表为ListIterator,而不是在将其添加到ListIterator之前将项目放入arrayList。所有方法都更改为迭代。工作正常:)

在迭代列表时不能删除对象

一个选项是使用迭代器进行迭代,而不是使用“增强的for循环”。您需要稍微修改循环代码,但功能是相同的


另一种方法:将要删除的所有对象存储在辅助列表中,并在循环结束时将其全部删除。

Wow。我还没有想到那个辅助列表。我喜欢这个主意。我试试看。
Exception in thread "Thread-2" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at project.objects.characters.Player.playerLogic(Player.java:77)
at project.objects.characters.Player.update(Player.java:70)
at project.world.World.update(World.java:110)
at project.Main.update(Main.java:122)
at project.Main.run(Main.java:65)
at java.lang.Thread.run(Thread.java:745)
public void render(Graphics g) {
    if(menu.getChoice()==-1){
        menu.render(g);
    }
    else if(menu.getChoice()==0){
        g.setColor(Color.white);
        for(AbstractObject tempObj : objects){
            tempObj.render(g);
        }
    }                
}