Java switch 语句来处理两个变量?

2022-09-04 19:56:21

我正在寻找一种使用单个开关处理两个字符串的方法,我认为这在Java中是不可能的。

以下是一些伪代码,我想仅通过开关实现。

    int s1Value = 0;
    int s2Value = 0;
    String s1 = "a";
    String s2 = "g";
    switch (s1 || s2) {
         case "a": s1value = 0; s2value = 0; break;
         case "b": s1value = 1; s2value = 1; break;
         case "c": s1value = 2; s2value = 2; break;
         case "d": s1value = 3; s2value = 3; break;
         case "e": s1value = 4; s2value = 4; break;
         case "f": s1value = 5; s2value = 5; break;
         case "g": s1value = 6; s2value = 6; break;
    }

答案 1

无法根据您的要求使用单个交换机。这与你使用Java一样接近。

    switch (s1)  {
        case "a":  doAC(); break;
        case "b":  doBD(); break;
        default:
            switch(s2) {
                case "c":  doAC(); break;
                case "d":  doBD(); break;
            }
   }        

答案 2

您是否考虑过不使用 switch 语句,而是使用查找表?

public class MyClass {
    private static final Map<String, Integer> valuesMap;

    static {
         Map<String,Integer> aMap = new HashMap<>();
         aMap.put("a", 0);
         aMap.put("b", 1);
              ..... rest .....
         valuesMap = Collections.unmodifiableMap(aMap);
    }

    public void foo()
    {
       int s1Value = 0;
       int s2Value = 0;

       String s1 = "a";
       String s2 = "g";
       if( valuesMap.containsKey(s1) )
       {
          s1Value = valuesMap.get(s1);
          s2Value = s1Value;
       }
       else if( valuesMap.contansKey(s2) )
       {
          s1Value = valuesMap(s2);
          s2Value = s1Value;
       }
    }
}

如果您需要一组不同的 s2Value 值,则可以构造第二个映射来从中提取这些值。

由于你想使用开关,我认为这意味着可能的候选项和值是一个固定的,在开发时已知的列表,所以使用像这样的静态初始化映射应该不是问题。