I have the following code
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();
}
And the compiler gives e ConcurrentModificationException
even though i set epsilonStanje=epsilonSljedecaStanja
after I already finished my foreach loop. I tried debuggng, but can't seem to fix this.
The program that I'm making is single-threaded
EDIT:
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
and epsilonStanja
both are pointing to the same object as shown below.
epsilonStanja = sljedecaStanja;
for (String epsilonStanje : epsilonStanja) {
...
sljedecaStanja.addAll(trenutniPrijelaz.getSkupIzlaznihStanja());
...
}
you can't add data while iterating.
Solution: create a separate list and finally merge it as per your requirement or try below code:
epsilonStanja.addAll(sljedecaStanja);