我有以下代码
boolean postojaoJePrijelaz = true;
epsilonStanja = sljedecaStanja;
while(postojaoJePrijelaz) {
for (String epsilonStanje : epsilonStanja) {
for (Prijelaz trenutniPrijelaz : prijelazi) {
postojaoJePrijelaz = false;
if (trenutniPrijelaz.postojiPrijelaz(epsilonStanje.trim(), "$")) {
sljedecaStanja.addAll(trenutniPrijelaz.getSkupIzlaznihStanja());
epsilonSljedecaStanja.addAll(trenutniPrijelaz.getSkupIzlaznihStanja());
postojaoJePrijelaz = true;
}
}
}
epsilonStanja = epsilonSljedecaStanja;
epsilonSljedecaStanja.clear();
}
即使我在完成foreach循环后设置ConcurrentModificationException
,编译器也会给出epsilonStanje=epsilonSljedecaStanja
。我尝试过debuggng,但似乎无法解决这个问题。
我正在制作的程序是单线程的
编辑:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at com.company.Main.main(Main.java:55)
答案 0 :(得分:2)
epsilonStanja
和epsilonStanja
都指向同一个对象,如下所示。
epsilonStanja = sljedecaStanja;
for (String epsilonStanje : epsilonStanja) {
...
sljedecaStanja.addAll(trenutniPrijelaz.getSkupIzlaznihStanja());
...
}
您无法在迭代时添加数据。
解决方案:创建一个单独的列表,最后根据您的要求合并它或尝试下面的代码:
epsilonStanja.addAll(sljedecaStanja);
答案 1 :(得分:1)
您将列表sljedecaStanja的引用分配给epsilonStanja。这是问题..试试
epsilonStanja = new ArrayList<String>(sljedecaStanja);