Question

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)
Was it helpful?

Solution

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);

OTHER TIPS

you are assigning the reference of list sljedecaStanja to epsilonStanja. This is the issue.. Try

epsilonStanja = new ArrayList<String>(sljedecaStanja);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top