我有以下代码

                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)

最佳答案

epsilonStanjaepsilonStanja都指向相同的对象,如下所示。

            epsilonStanja = sljedecaStanja;

            for (String epsilonStanje : epsilonStanja) {
                ...
                sljedecaStanja.addAll(trenutniPrijelaz.getSkupIzlaznihStanja());
                ...
            }


您不能在迭代时添加数据。

解决方案:创建一个单独的列表,最后根据您的要求将其合并,或尝试以下代码:

epsilonStanja.addAll(sljedecaStanja);

关于java - 即使在foreach之外更改值,也会发生ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23389546/

10-10 01:54