我有一个错误,我得到一个当前的修改异常,我找不到它

时间:2017-02-27 21:25:02

标签: java arrays exception

我正在创建一个简单的拼写检查程序。它基本上加载在字典和拼写错误的单词中。我有一个旨在删除重复的函数,以及另一个生成要检查的单词的元音组合的函数。

我的元音功能有问题。我一直得到CurrentModifcationException,但我觉得它应该能够修改数组添加单词,因为数组是在顶部静态定义的。

这个函数基本上接受一个ArrayList,并递归地向ArrayList添加额外的单词,这些单词是输入单词的元音组合。一个例子是如果输入'who',它会将'wha,whi,whe,whu'添加到数组列表中。

代码

在集装箱类别的顶部定义

private static List<String> vowelList = new ArrayList<>();
private static ArrayList<String> checkList = new ArrayList<>();

private static void feedWordsForVowelCheck() {

        for(String temp : checkList) {
            System.out.println("Checking vowels for: " + temp);
          //  createVowelCombosStatic(temp, 0);
            createVowelCombos(temp, 0 , checkList);
        }

       // System.out.println("Does this finish?");
    }

  private static void createVowelCombos(String word, int start, ArrayList<String> checkList) {
        StringBuilder sbAddWord = new StringBuilder(word);
        String[] splitWord = word.split("");


        if (start==splitWord.length) {
            checkList.add(word);
            return;
        }

        if (splitWord[start].matches(".*[aeiou]")) {
            for (int j = 0; j < 5; j++) {
                sbAddWord.setCharAt(start, vowelList.get(j).charAt(0));
                createVowelCombos(sbAddWord.toString(),start+1, checkList);
                //System.out.println(sbAddWord.toString());
            }
        }
        else
            createVowelCombos(sbAddWord.toString(),start+1, checkList);
    }

2 个答案:

答案 0 :(得分:3)

您无法修改正在迭代的列表。这将为您提供并发修改。

你在这里迭代:

 for(String temp : checkList) {

但您也在这里添加值:

 if (start==splitWord.length) {
            checkList.add(word);
            return;
        }

checkList与您迭代的列表相同。如果您需要在迭代时添加值,请查看ListIterator

答案 1 :(得分:1)

是并发修改异常吗?你看到这个错误,因为你在循环中修改createVowelCombos中的checkList,请改用Iterator

写下这样的东西:

Iterator itr = checkList .iterator();

    while(litr.hasNext()) {
        System.out.println("Checking vowels for: " + temp);
      //  createVowelCombosStatic(temp, 0);
        createVowelCombos(temp, 0 , checkList);
    }

   // System.out.println("Does this finish?");
}

此外,您的逻辑看起来有些问题。你不能在没有结束它的手段(规则)的情况下递归地调用自身内的方法。你的将永远运行