java - 使用 2D Array 切换状态而不使用 Switch Case

标签 java multidimensional-array

我想创建一个具有不同状态的无尽自动机,对自动机的状态和输入使用两个枚举属性。一种更改当前状态和输入提供的状态的方法无法按我的预期工作。

我意识到我可以使用 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

  • 第一个映射以当前状态为键,所有下一个状态为值(它将是第二个映射)
  • 第二张 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/

    相关文章:

    c++ - 多维数组的类型、名称是什么?

    java - Guice:类或实例级绑定(bind)注释

    java - 单击 JFrame 标题时隐藏弹出窗口

    java - 用于 java bean 到 json\xml 序列化的 Jackson 处理器

    java - 从 auth0 仪表板中删除用户时是否有任何 Hook 或回调?

    PHP - 如何将数组中的数据显示到树或表中?

    C++ 复制多维 vector

    php - 使用多维数组调用 array_diff_assoc() 时为 "Array to string conversion error"

    javascript - 这个 JavaScript 多维数组有什么问题?

    java - 我可以使用该字符串作为索引将字符串存储在对象数组中吗?