このコードを正しく動作させるのに少し苦労しています。1 行のファイルを取得し、グラフを移動して、特定の入力番号の各状態を出力することになっています。
サンプル ファイルは次のようになります。1; 0; 1; 1; 0; 1
出力は次のようになります。
入力 = 1; 状態 = ArraySet[開始]
入力 = 0; 状態 = ArraySet[開始、近い]
入力 = 1; 状態 = ArraySet[開始、終了]
入力 = 1; 状態 = ArraySet[開始]
入力 = 0; 状態 = ArraySet[開始、近い]
入力 = 1; 状態 = ArraySet[開始、終了]
以下のコードを完成させました。
public class NDFA {
public static void main(String[] args) {
Map<String, Map<String,Set<String>>> mainMap = new ArrayMap<String, Map<String,Set<String>>>();
TypedBufferReader input = new TypedBufferReader("Enter Non-Deterministic Finite Automaton Description File: ");
for (;;) {
try {
String line = input.readLine();
StringTokenizer st = new StringTokenizer(line, ";");
String state = st.nextToken();
Map<String,Set<String>> transitions = mainMap.get(state);
transitions = new ArrayMap<String, Set<String>>();
Set<String> stateSet = new ArraySet<String>();
while (st.hasMoreTokens()) {
String intStateInput = st.nextToken();
String inputState = st.nextToken();
stateSet.add(inputState);
transitions.put(intStateInput, stateSet);
}
mainMap.put(state, transitions);
} catch (EOFException e) { break;}
}
//sort
List<String> mapList = new ArrayList<String>(mainMap.keys());
Collections.sort(mapList);
System.out.println("Non-Deterministic Finite Automaton");
for (String s : mapList) {
Map<String, Set<String>> tempMap = mainMap.get(s);
System.out.println(s + " transitions = " + tempMap.toString());
}
//Process one line file.
TypedBufferReader oneLineInput = new TypedBufferReader("Enter start state/inputs file: ");
try {
String oneLine = oneLineInput.readLine();
StringTokenizer st = new StringTokenizer(oneLine,";");
String currentState = st.nextToken();
System.out.println("Initial state = " + currentState);
String inputNum = "";
Set<String> inputSet;
//stuck while storing inputNums in a set.
while (st.hasMoreTokens()) {
inputNum = st.nextToken();
inputSet.add(inputNum);
Map<String,Set<String>> transitions = mainMap.get(currentState);
currentState = transitions.get(inputSet.values());
System.out.println("input = " + inputNum + "; new state = " + currentState) ;
}
System.out.println("Final state = " + currentState);
} catch (EOFException e) {}
}
}
現在の状態から正しいセットを出力できません。入力数値は簡単に確認できますが、最初から最後まで進むと混乱し、正しい ArraySet を出力できません。