java - 为什么 Switch 会跳过一种情况并针对不同情况执行具有错误值的代码

标签 java switch-statement case

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

此开关比较数组的值

它执行切换,然后转到与当前值相同的情况之一, 但这个案例是空的,没有中断,也没有代码 因此它会跳转并执行下一个与当前情况具有不同值的情况的代码。

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

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,因为它再次执行案例“sun”

最佳答案

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

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

关于java - 为什么 Switch 会跳过一种情况并针对不同情况执行具有错误值的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56831201/

相关文章:

java - 如何使用 id 检索枚举名称?

java - @Configuration 类的 bean 是否始终为 null?

default - switch 语句是否应该始终包含 default 子句?

c - Switch 语句不执行案例 (c)

java - 在 JFreeChart 中组合 XYPlot 和 TimeSeries 元素

java - 如何将重复数组元素分配为唯一键,并计算相应的整数值?

java - JAVA 中未输入 Switch case

mysql - 无法更改存储过程中的 OUT 变量

sql-server - T-SQL CASE 检查最年轻的日期,然后对照其他值

mysql - SQL执行时的Case表达式