私は、文脈自由文法で読み込み、すべての非終端記号のFirstSetsを返すJavaプログラムを書くという割り当てを持っています。私は、Java - 再帰的メソッドとネストされたイテレータのConcurrentModificationException
String s = it1.next();
ArrayList<String> nestedFS = firstSet(s);
私の知る限り:しかし、私はラインのConcurrentModificationExceptionがエラーを取得しておく
public static ArrayList<String> firstSet(String nonTerminal){
ArrayList<String> first = new ArrayList<String>();
//Find initial elements of FirstSet
for(String[] current : prodRules) {
if (current[0].equals(nonTerminal)){ //if the production rule is for that non-terminal
if(current.length > 2) {
first.add(current[2]); //first element after "-->" is added to FirstSet
} else
first.add("eps");
}
}
//Add the FirstSet of each element in the initial FirstSet
ArrayList<String> copy = first; //to avoid ConcurrentModificationException
Iterator<String> it1 = copy.iterator();
while(it1.hasNext()) { //recursively find each FirstSet of the initial elements
String s = it1.next();
System.out.println("FIRST("+s+")={");
ArrayList<String> nestedFS = firstSet(s);
Iterator<String> it2 = nestedFS.iterator();
while(it2.hasNext()) {
String f = it2.next();
if(!first.contains(f))
first.add(f);
System.out.print(" "+f+" ");
}
System.out.print("}");
}
return first;
}
:私は私のFirstSet()メソッドを再帰的なアプローチを取ってきました私が現在繰り返しているリストは変更しません。むしろ、私はコピーを繰り返しています。私は余分なメモリの使用やスピードには関心がありません、私は動作するためにこれを必要とします。
私がここで間違っていることについての手掛かりはありますか?どんな助けも大歓迎です。
これが解決策でした。ありがとうございました。 – NeroTheHero