迭代两个ArrayLists,就像在二维数组中一样

时间:2016-04-15 12:56:08

标签: java arraylist multidimensional-array iterator

我正在尝试迭代两个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:抱歉英语不好

2 个答案:

答案 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
相关问题