我正在为学校做一个项目,但我现在有点卡住了
我的问题是我有一个Squares的数组列表 每个Square都有一个值(从0到100)。它的起始值是9999,所以我可以检查它是否被检查。 如果检查了一个正方形,我希望它从arrayList中删除。 所以过了一会儿就没有广场了。
有一些代码可以设置第一个值,这就是我检查值是否为9999的原因。
但是我收到了一个错误。一个我以前没见过的。
线程中的异常“AWT-EventQueue-0”java.util.ConcurrentModificationException
Vak = Square
这是我的代码:
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);
}
}
}
答案 0 :(得分:3)
在迭代时,您正在从集合中删除元素。由于迭代器在这种情况下可能会产生不可预测的结果,因此无法快速抛出您遇到的异常。
您只能在遍历它时通过迭代器的方法更改集合。迭代器本身应该有remove方法,它删除当前元素并保持迭代器不变。
答案 1 :(得分:2)
在迭代时,您应该使用Iterator
实例来删除对象:
itre.remove();
答案 2 :(得分:1)
您可以尝试这样:
itre.remove();
答案 3 :(得分:0)
ITERATOR永远不会允许你在迭代时进行修改..你需要使用循环代替..这是因为你正在使用迭代器,同时其他线程正在修改列表......