3

以前にこの質問を投稿しましたが、修正してもう少し詳しく試してみようと思いました。下にこの画像があります。私が達成しようとしているのは、偶数の「バブル」から始まり、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状態=偶数

最終状態=偶数

この問題で私を助けてください。

4

2 に答える 2

2

それは簡単だと思います。前の状態を覚えておく必要があるので、

Step 1: prevState = EVEN
Step 2: Read currentState (Read them as Integer)
Step 3: Repeate Until EOF
          if currentState | prevState == 0  then
             state = EVEN
             print EVEN 
          else
             state =  ODD
             print ODD
于 2012-10-11T08:28:53.527 に答える
2

ループでは、現在の状態名にリンクされた遷移を取得してから、指定された遷移の新しい状態の名前を取得します。

while (st.hasMoreTokens()) {
   String inputNum = st.nextToken();          
   Map<String,String> mainMap transitions = mainMap.get(initialState);
   initialState = transitions.get(inputNum);
} 

また、currentStateのinitialSateの名前を変更しますが、個人的な好みです:)

于 2012-10-11T08:33:20.763 に答える