1

我正在为学校做一个项目,但我现在有点卡住了

我的问题是我有一个正方形数组列表每个正方形都有一个值(从 0 到 100)。它的起始值为 9999,所以我可以检查它是否被选中。如果选中了一个正方形,我希望将其从 arrayList 中删除。所以过了一会儿就没有正方形了。

有一些代码设置了第一个值,这就是为什么我检查值是否为 9999。

但我得到一个错误。一个我以前没见过的。

线程“AWT-EventQueue-0”中的异常 java.util.ConcurrentModificationException

Vak = 正方形

这是我的代码:

while (!vakken.isEmpty()) { // check if empty
        Iterator itrVak = vakken.iterator();
        while (itrVak.hasNext()) {
            Vak vak = (Vak) itrVak.next(); // here is get the error
            if (vak.getValue() != 9999) {// check if square value is 9999
                Collection checkVakken = vak.getNeighbour().values();
                Iterator itre = checkVakken.iterator();
                while (itre.hasNext()) {
                    Vak nextVak = (Vak) itre.next();
                    if (nextVak != null) {
                        if (nextVak.getValue() == 9999) {
                            nextVak.setValue(vak.getValue() + 1); // set value by its neighbour
                            vakken.remove(vak);
                            checkvakken.add(vak);
                        }
                    }
                }
            } else {
                vakken.remove(vak);
                checkvakken.add(vak);
            }
        }
    }
4

4 回答 4

3

在迭代集合时,您正在从集合中删除元素。由于迭代器在这种情况下可能会产生不可预知的结果,因此它无法快速抛出您遇到的异常。

您只能在遍历集合时通过迭代器的方法更改集合。迭代器本身应该有 remove 方法,它删除当前元素并保持迭代器完好无损。

于 2012-06-08T10:28:05.797 回答
2

迭代时,您应该使用Iterator实例来删除对象:

itre.remove();

于 2012-06-08T10:25:04.217 回答
1

你可以这样尝试:

itre.remove();
于 2012-06-08T10:57:43.097 回答
0

迭代器永远不允许您在迭代时进行修改..您需要改用循环..发生这种情况是因为您正在使用迭代器,同时其他线程正在修改列表...

于 2012-06-08T10:27:01.180 回答