我想创建一个具有不同状态的无尽自动机,对自动机的状态和输入使用两个枚举属性。一种更改当前状态和输入提供的状态的方法无法按我的预期工作。
我意识到我可以使用 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 应该根据输入更改为新状态。
结果:
“需要:输入,找到:状态”
最佳答案
您可以使用 2 张 map
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
关于java - 使用 2D Array 切换状态而不使用 Switch Case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56209809/