带有错误输出的switch语句

时间:2019-04-04 11:08:33

标签: java arrays switch-statement break

我遇到了一个基本问题,即将开关大小写与字符串一起使用。

在案例之间不使用Break语句,但是为什么即使与案例字符串不匹配,它也会在所有案例中使用?

所以我很好奇 为什么输出3而不是1?

 public static void main(String [] args)
      {
        int wd=0;

        String days[]={"sun","mon","wed","sat"};

        for(String s:days)
        {
          switch (s)
          {
          case "sat":
          case "sun":
            wd-=1;
            break;
          case "mon":
            wd++;
          case "wed":
            wd+=2;
          }
        }
        System.out.println(wd);
      }

2 个答案:

答案 0 :(得分:5)

break;的末尾没有case "mon",因此值也增加了2

您没想到的流:

0    -1   -1   +1+2  +2 = 3
^     ^    ^   ^     ^
init sat  sun  mon  wed 

添加以下中断将导致输出为1

case "mon":
  wd++;
  break;

答案 1 :(得分:1)

“ sat”和“ mon”的个案末没有break;。 这意味着,当元素与“ sat”和“ mon” case相匹配时,它将执行该情况下包含的代码,但随后会进入下一个情况。

到达break时,它会跳出切换块。 这将停止在该块内部执行更多代码和进行案例测试。

在这种情况下。当测试“ sat”和“ mon”时,它没有看到break,因此继续测试。

0   -1    0    2    4    3
^    ^    ^    ^    ^    ^
    sun  mon  mon  wed  sat