当前位置: 首页 > 知识库问答 >
问题:

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

施雅懿
2023-03-14

我正在寻找一种使用单个开关处理两个字符串的方法,我认为这在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;
    }

共有3个答案

向安福
2023-03-14

使用单个开关实现这一点的唯一方法是首先合并两个值,找到优先级最高的值,然后将开关应用于结果。在您的示例中,s1和s2的最小值,并打开结果。

因为“a”到“g”是一个例子,所以您需要有一些有意义的方法来首先对实际值进行排序。

郑俊弼
2023-03-14

您是否考虑过不使用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的不同值集,则可以构建第二个映射来从中提取这些值。

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

孟跃
2023-03-14

根据您的要求使用单个开关是不可能的。这与您使用Java所能达到的目标非常接近。

    switch (s1)  {
        case "a":  doAC(); break;
        case "b":  doBD(); break;
        default:
            switch(s2) {
                case "c":  doAC(); break;
                case "d":  doBD(); break;
            }
   }        
 类似资料:
  • 在我的应用程序(这是一个Android游戏)中,我有一个方法可以检查玩家是否还活着,如果没有,运行一个动画,游戏就结束了。 根据玩家的输球方式,目前有3种不同的动画可用。 例如,它们可能从屏幕上掉下来,撞到一只鸟,或者被从天上掉下来的东西压扁。每一个都有不同的动画。 基本上,我正在做的是: 当玩家输球时,我设置了它发生的方法,例如,如果他们被鸟击中: 然后我通过在我的check Gameover(

  • 我正在用php和ajax创建一个消息传递站点。 获取对话有问题。 问题是,每当两个用户在他们之间聊天时,就会有两个id不同的行; A和B正在聊天,彼此只写了4条消息 消息数据库是这样的 我的目标是用这个代码获取记录 $页面所有者是登录的用户; 使用这种方法,我可以进行两次相同的对话 a 代码在页面上给了我两次对话,我只想得到一个结果; 我的整个php代码是这样的

  • 主要内容:命令行参数,set命令,使用数字值,局部与全局变量,使用环境变量批处理文件中有两种类型的变量。 其中一个参数是在调用批处理文件时可以传递的参数,另一个是通过命令完成的。 命令行参数 批处理脚本支持命令行参数的概念,其中参数可以在被调用时传递给批处理文件。参数可以通过变量,,等从批处理文件中调用。 以下示例显示了一个批处理文件,它接受3个命令行参数,并将它们回显到命令行屏幕。 如果上面的批处理脚本存储在一个名为的文件中,我们将运行该批处理 - 以下是批处理文件执

  • This tells Smarty how to handle PHP code embedded in the templates. There are four possible settings, default being SMARTY_PHP_PASSTHRU. Note that this does NOT affect php code within {php}{/php} tags

  • 我遇到了一个问题,我有多个窗体上有许多控件(20-40)。问题是,当我处理回发时,我需要将它们的值放入变量中,如果它们不是ASP.NET服务器控件(即选择、输入等)我有时需要确保他们的存在。因此,如果我有一个普通html复选框,它是未选中的,它将不会被发送到服务器,您需要检查它的存在,然后才能获得它的值。之后,我需要将它们传递到一个方法中以保存到数据库中。该方法处理我所有的crud和业务验证。设置

  • 我尝试编写了一个简单的批处理文件,您可以在下面看到: