我之前发布过这个问题,但我想我会修改它并尝试更多细节。
我有下面这张图片。我想要完成的是从均匀的“泡沫”开始并从 1 和 0 过渡到其他状态。这是我所完成的:

1) 使用所有状态(偶数和奇数)以及另一个正确具有远离该状态的输入(0 和 1)的映射创建 mainMap。
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) {}



  }

}

我应该读取一行如下的文件:“even; 1;0;1;1;0;1”
因此,它将打印 even 的初始状态并继续在 mainMap 中移动。

对于 even 的初始状态,它会是这样的:

初始状态 = 偶数

输入 = 1 状态 = 奇数

输入 = 0 状态 = 奇数

输入 = 1 状态 = 偶数

输入 = 1 状态 = 奇数

输入 = 0 状态 = 奇数

输入 = 1 状态 = 偶数

最终状态 = 偶数

请帮我解决这个问题。

最佳答案

在您的循环中,您将获得链接到当前状态名称的转换,然后获取给定转换的新状态的名称:

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

我也会重命名 currentState 中的 initialSate,但这只是个人喜好:)

关于java - 无法找出在图形内移动的正确算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12835014/

10-13 07:26