以前にこの質問を投稿しましたが、修正してもう少し詳しく試してみようと思いました。下にこの画像があります。私が達成しようとしているのは、偶数の「バブル」から始まり、1と0から他の状態に移行することです。これが私が達成したことです:
1)すべての状態(偶数と奇数)を含むmainMapと、その状態から離れる入力(0と1)を正しく持つ別のマップを作成します。2)状態を偶数から奇数への遷移からソートします。
これまでの私のコードは次のとおりです。
public static void main(String[] args) {
//Map<Even, ArrayMap[0->even,1->odd]> for first line
Map<String, Map<String,String>> mainMap = new ArrayMap<String, Map<String,String>>();
//Map<int,even/odd>
TypedBufferReader input = new TypedBufferReader("Enter Finite Automaton Description File: ");
//read the file.
for (;;) {
try {
String line = input.readLine();
StringTokenizer st = new StringTokenizer(line, ";");
String state = st.nextToken();
Map<String,String> transitions = mainMap.get(state);
transitions = new ArrayMap<String, String>();
while (st.hasMoreTokens()) {
String intStateInput = st.nextToken();
String inputState = st.nextToken();
transitions.put(intStateInput, inputState);
}
mainMap.put(state, transitions);
} catch (EOFException e) { break;}
}
//Print in alphabetical order of states. odd/even to even/odd
List<String> mapList = new ArrayList<String>(mainMap.keys());
Collections.sort(mapList);
for (String s : mapList) {
Map<String, 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 initialState = st.nextToken();
System.out.println("Initial state = " + initialState);
while (st.hasMoreTokens()) {
String inputNum = st.nextToken();
}
} catch (EOFException e) {}
}
}
次のように1行のファイルを読み取ることになっています。"even;1; 0; 1; 1; 0; 1"したがって、evenの初期状態が出力され、mainMap内を移動し続けます。
初期状態でさえ、次のようになります。
初期状態=偶数
入力=1状態=奇数
入力=0状態=奇数
入力=1状態=偶数
入力=1状態=奇数
入力=0状態=奇数
入力=1状態=偶数
最終状態=偶数
この問題で私を助けてください。