【问题标题】:why Switch skip one case and execute code for different case with wrong value [duplicate]为什么切换跳过一个案例并为不同的案例执行代码错误的值[重复]
【发布时间】:2019-07-01 06:58:43
【问题描述】:

我有一个案例要研究我有这个问题让我对 Switch 语句感到困惑我只需要了解为什么我不需要此代码的解决方案。

此开关比较数组的值

它执行切换,然后转到与当前值相同的情况之一, 但是这种情况是空的,没有中断,也没有代码 所以它会跳转并执行下一个 case 的代码,该代码与当前 case 的值不同。

如果我包含了一个中断,它会正常工作并且不会执行下一个案例代码,但我需要了解为什么它会以错误值执行下一个案例。

public class HelloWorld{

    public static void main(String []args){
        int wd=0;
        String days[]={"sun","mon","wed","sat"};
        for(String s:days){
            switch(s){
            // current value is sat it will execute case "sun"
            case "sat":
            case "sun":
            /*
            *after going through all array values it will execute this    value's code 
            *when the current value is sat
            */
                wd -= 1; 
                break;
            case "mon":
                wd -= 1;
                break;
            case "wed":
                wd+=2;
            }

        }
        System.out.print(wd);
    }
}

我预计输出为 0,因为 wd=-1-1+2=0 实际 = -1,因为它的执行案例再次“太阳”

【问题讨论】:

  • 因为 switch 语句就是这样设计的。您可以将其解读为“如果字符串是 sat 或 sun,则 ...”。
  • 感谢 fuzious 回答了我的问题

标签: java switch-statement case


【解决方案1】:

switch 案例失败 - 执行开始并且标签匹配并继续直到案例的执行终止,通常带有break(尽管return,抛出异常或任何其他形式的异常结尾也可以解决问题)。

您可以在Java's tuturoial 中阅读有关此行为的更多信息。

【讨论】:

    【解决方案2】:
    case "sat":
    case "sun":
    

    如果您将其更改为 if else 语句,它将显示为:

    if (s == "sat" || s == "sun")
    

    基本上,如果您有两个 case 以这种方式相互跟随,java 将其视为逻辑或。如果您在两者之间设置中断,则每个案例都会单独处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 2022-06-15
      相关资源
      最近更新 更多