2012-06-08 54 views
1

我工作的学校的一个项目,但我有点卡住,现在ArrayList中删除错误

我的问题是,我有广场 的ArrayList每个广场都有一个值(从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); 
      } 
     } 
    } 

回答

3

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

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

+0

所以它应该是itrVak.remove();?但是当我这样做时,它会在线程“AWT-EventQueue-0”中抛出异常java.lang.IllegalStateException –

2

迭代时,你应该使用Iterator实例用于去除物体:

itre.remove();

+0

但必须从迭代器不vakken被删除。所以如果它是一个迭代器,我删除它也会从vakken(arrayList)中移除 –

+0

@KevinKamer:它将从原始实例中删除。 –

+0

迭代器不允许我删除一个对象。只删除他正在处理的内容。但它会在线程“AWT-EventQueue-0”中抛出异常java.lang.IllegalStateException –

0

ITERATOR永远不会让你修改当你迭代..你需要使用循环代替..这种情况因为你使用迭代器,同时其他线程正在修改列表...

1

你可以尝试这样的:

itre.remove();