Оператор Switch со строкой неверного вывода - PullRequest
1 голос
/ 04 апреля 2019

Я сталкивался с этим основным вопросом, где регистр переключателя используется со строкой.

Оператор break не используется между случаями, но почему он применяется ко всем случаям, даже если он не соответствует строке case?

Так что мне интересно знать почему вывод 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 ]

5 голосов
/ 04 апреля 2019

У вас нет break; в конце case "mon", поэтому значение также увеличивается на 2

которого вы не ожидали, поток:

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

Добавление разрыва, как показано ниже, приведет к выводу 1

case "mon":
  wd++;
  break;
1 голос
/ 04 апреля 2019

Не существует break; в конце случаев для «сат» и «пн».Это означает, что когда элемент соответствует «sat» и «mon» case, он выполнит код, содержащийся в этом случае, но затем попадет в следующий.

Когда достигается break, он ломаетсяиз блока переключателей.Это остановит выполнение большего количества кода и тестирование случая внутри блока.

В этом случае.Когда он проверяет «sat» и «mon», он не видит break и поэтому продолжает тестирование.

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