我有以下代码
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
,编译器也会给出e 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)
最佳答案
epsilonStanja
和epsilonStanja
都指向相同的对象,如下所示。
epsilonStanja = sljedecaStanja;
for (String epsilonStanje : epsilonStanja) {
...
sljedecaStanja.addAll(trenutniPrijelaz.getSkupIzlaznihStanja());
...
}
您不能在迭代时添加数据。
解决方案:创建一个单独的列表,最后根据您的要求将其合并,或尝试以下代码:
epsilonStanja.addAll(sljedecaStanja);
关于java - 即使在foreach之外更改值,也会发生ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23389546/