我想使用两个枚举属性为自动机和输入的状态创建具有不同状态的无尽自动机。一种更改当前状态和输入状态的方法无法按我预期的方式工作。
我意识到我可以使用SwitchCase语句,但这会使代码膨胀很多。
我的代码:
public enum state {StandBy, Off, Err, Working};
public enum input {1, 2};
private static state changetable [][]
= {
{state.Working, state.Off, state.Err, state.Err},
{state.Err, state.StandBy, state.Err, state.Working}
};
/* table overwiev
Input| Off, Working, Error, StandBy
1 | Working, Off, Err, Error
2 | Error, StandBy, Error, Working
*/
public input statchange(state state_now, input inp){
return changetable[inp.ordinal()][stat_now.ordinal()];
}
我期望的是: 给定输入,state_now应该更改为新状态。 结果: “要求:输入,找到:状态”
答案 0 :(得分:0)
您可以使用2张地图
public enum State {StandBy, Off, Err, Working};
public enum Input {ONE, TWO};
public static Map<Input, State> createStandByNextStates() {
Map<Input, State> nextStates = new HashMap<>();
nextStates.put(Input.ONE, State.Off);
nextStates.put(Input.TWO, State.StandBy);
return nextStates;
}
public static void main(String[] args) throws IOException {
// Map<Current state, Map<input, next state>>
Map<State, Map<Input, State>> changetable = new HashMap<>();
changetable.put(State.StandBy, createStandByNextStates());
System.out.println(changetable.get(State.StandBy).get(Input.ONE));
System.out.println(changetable.get(State.StandBy).get(Input.TWO));
}
输出:
Off
StandBy