即使其他情况匹配,Switch也会转到默认情况

时间:2016-10-12 21:15:58

标签: java

我知道这个问题的答案是-1,但我不明白为什么会这样。有人可以帮我搞清楚吗?

int x = 0;
int y = 0;

switch (x + 1)  {
  case 0: y = 0; 
  case 1: y = 1;
  default: y = -1
}

5 个答案:

答案 0 :(得分:4)

您忘了switch (x + 1) { case 0: y = 0; break; ^^^^^ case 1: y = 1; break; ^^^^^ default: y = -1 } ,因此所有匹配的案例都会“落空”:

你需要这个:

Artisan::call('whatever:command');

答案 1 :(得分:1)

每个案例后你需要break秒。

尝试:

int x = 0;
int y = 0;
switch (x + 1)  {
case 0: y = 0; break;
case 1: y = 1; break;
default: y = -1;
}

答案 2 :(得分:1)

说明

因为即使case条件匹配,它也不会在执行块后退出switch但是转到下一个case(并且default匹配所有条件),所以你应该使用break声明。

示范

//here y is 0
switch (x + 1)  {
  case 0: y = 0; //skipped because x+1 == 1
  case 1: y = 1; //executed, y now is 1
  default: y = -1; //matches all conditions, so after the previous one this one is executed and y is -1 now
}

解决方案

switch (x + 1)  {
  case 0: y = 0; break; //skipped because x+1 == 1
  case 1: y = 1; break; //executed, y now is 1 and we exit from switch because of break statement
  default: y = -1;
}

答案 3 :(得分:0)

没有break语句,所以当一个案例匹配时,那个案例之后的所有语句都会被执行。

Read here about switch case in detail

答案 4 :(得分:0)

switch (x + 1)  {

在这种情况下,x + 1为1,因此切换跳转到case 1并将y设置为1.由于break之后没有y = 1语句,代码将进入下一行,将y设置为-1