Java实现有限状态机
时间: 2023-10-11 07:07:13 浏览: 83
java实现有限状态机
4星 · 用户满意度95%
有限状态机(Finite State Machine,FSM)是一种数学模型,用于描述自动化系统的行为。在Java中,可以使用类来实现有限状态机。
首先,需要定义一个状态枚举类,如下所示:
```java
public enum State {
STATE1,
STATE2,
STATE3
}
```
然后,可以定义一个状态转移表,它描述了从一个状态到另一个状态的转移条件。例如:
```java
public class TransitionTable {
private static final Map<State, Map<String, State>> table = new HashMap<>();
static {
// 从STATE1转移到STATE2,条件是输入的字符串为"abc"
Map<String, State> transitionsFromState1 = new HashMap<>();
transitionsFromState1.put("abc", State.STATE2);
table.put(State.STATE1, transitionsFromState1);
// 从STATE2转移到STATE3,条件是输入的字符串为"def"
Map<String, State> transitionsFromState2 = new HashMap<>();
transitionsFromState2.put("def", State.STATE3);
table.put(State.STATE2, transitionsFromState2);
// ...
}
public static State getNextState(State currentState, String input) {
if (!table.containsKey(currentState)) {
throw new IllegalArgumentException("Invalid state: " + currentState);
}
Map<String, State> transitions = table.get(currentState);
if (!transitions.containsKey(input)) {
throw new IllegalArgumentException("Invalid input: " + input);
}
return transitions.get(input);
}
}
```
最后,可以编写一个状态机类,该类包含一个当前状态和一个输入方法,用于根据输入和状态转移表更新当前状态。例如:
```java
public class StateMachine {
private State currentState;
public StateMachine(State initialState) {
this.currentState = initialState;
}
public void input(String input) {
currentState = TransitionTable.getNextState(currentState, input);
}
public State getCurrentState() {
return currentState;
}
}
```
可以使用以下代码来测试状态机:
```java
StateMachine stateMachine = new StateMachine(State.STATE1);
stateMachine.input("abc");
stateMachine.input("def");
System.out.println(stateMachine.getCurrentState()); // 输出STATE3
```
这是一个简单的有限状态机实现,可以根据需要进行扩展。
阅读全文