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