我正在尝试迭代两个ArrayList:其中一个名为" gegner"是一个关于enemys的列表,另一个名为" waende"是关于墙壁的。
每当墙壁和敌人接触时,两者都应该失去一个耐久性/健康。 由于它没有同时工作,我创建了一个新的方法,应该从列表中删除死亡对象。
我的想法是:
public void removeDeathObjects() {
Wand tempW;
Gegner tempG;
for (Iterator<Gegner> it = gegner.iterator(); it.hasNext();) {
tempG = it.next();
for (Iterator<Wand> it2 = waende.iterator(); it2.hasNext();) {
tempW = it2.next();
if(tempW.isDestroyed()){
it2.remove();
}
if (tempG.isDeath()){
it.remove();
}
}
}
}
但该程序在线程&#34; AWT-EventQueue-0&#34;中引发了一个&#34;异常。在行it.remove()
java.lang.IllegalStateException&#34;一旦至少有两面墙,那么这些咒语就不会完全被杀死。
我在哪里失败了?
如果你愿意,我可以给你整个代码,但它很长._。
PS:抱歉英语不好
答案 0 :(得分:1)
你的错误是你嵌套了两个完全独立的循环。查看代码,很明显waende
上的内部循环与gegner
上的外部循环无关:您对waende
的操作不依赖于对{{}的任何检查1}}。当gegner
为真时,tempG.isDeath()
会为it.remove()
中的每个Wand
重复执行,会发生什么情况。迭代器上的第一次删除成功,但第二次删除失败。
您需要做的是分开两个循环:
waende
答案 1 :(得分:1)
你的答案在这里:http://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#remove--
IllegalStateException - 如果尚未调用下一个方法,或者在上次调用下一个方法后已经调用了remove方法
您可以在Java 8中执行此操作,而不是手动迭代:
form-group