我正在创建一个简单的拼写检查程序。它基本上加载在字典和拼写错误的单词中。我有一个旨在删除重复的函数,以及另一个生成要检查的单词的元音组合的函数。
我的元音功能有问题。我一直得到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);
}
答案 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?");
}
此外,您的逻辑看起来有些问题。你不能在没有结束它的手段(规则)的情况下递归地调用自身内的方法。你的将永远运行