用字符串输出错误的switch语句

问题描述 投票:1回答:2

我遇到了这个基本问题,其中switch case与字符串一起使用。

在案例之间没有使用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);
      }
java arrays switch-statement break
2个回答
5
投票

你在break;的末尾没有case "mon"所以值也增加2

你没想到的,流程:

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

输出1将导致如下添加中断

case "mon":
  wd++;
  break;

1
投票

在“sat”和“mon”的案例结尾没有break;。这意味着当一个元素匹配“sat”和“mon”case时,它将执行该情况中包含的代码,但后来属于下一个案例。

当达到break时,它会从开关块中断开。这将阻止在块内执行更多代码和案例测试。

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

0   -1    0    2    4    3
^    ^    ^    ^    ^    ^
    sun  mon  mon  wed  sat
© www.soinside.com 2019 - 2024. All rights reserved.