Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 即使其他情况匹配,开关也会转到默认情况_Java - Fatal编程技术网

Java 即使其他情况匹配,开关也会转到默认情况

Java 即使其他情况匹配,开关也会转到默认情况,java,Java,我知道这个问题的答案是-1,但我不明白为什么是-1。有人能帮我弄清楚吗 int x = 0; int y = 0; switch (x + 1) { case 0: y = 0; case 1: y = 1; default: y = -1 } 您忘记了打破,因此所有匹配的案例都“失败”: 您需要这样做: switch (x + 1) { case 0: y = 0; break; ^^^^^ case 1: y = 1; break;

我知道这个问题的答案是-1,但我不明白为什么是-1。有人能帮我弄清楚吗

int x = 0;
int y = 0;

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

您忘记了打破,因此所有匹配的案例都“失败”:

您需要这样做:

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

您忘记了打破,因此所有匹配的案例都“失败”:

您需要这样做:

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

没有break语句,因此当一个case匹配时,将执行该case之后的所有语句


没有break语句,因此当一个case匹配时,该case之后的所有语句都将被执行

在这种情况下,
x+1
为1,因此开关跳到
case1
,并将y设置为1。由于在
y=1
之后没有
break
语句,因此代码会转到下一行,该行将
y
设置为
-1


在这种情况下,
x+1
为1,因此开关跳到
case1
,并将y设置为1。由于您在
y=1
之后没有
break
语句,因此代码会转到下一行,该行将
y
设置为
-1
,您需要在每个案例后使用
break
s

尝试:


在每个案例之后,您需要
break
s

尝试:

解释 因为即使
case
条件匹配,它在执行块后也不会退出
开关,而是转到下一个
case
(并且
默认值
匹配所有条件),所以您应该使用
break
语句

示范 解决方案 解释 因为即使
case
条件匹配,它在执行块后也不会退出
开关,而是转到下一个
case
(并且
默认值
匹配所有条件),所以您应该使用
break
语句

示范 解决方案
调试器的每个case语句后都没有break语句调试器的每个case语句后都没有break语句
int x = 0;
int y = 0;
switch (x + 1)  {
case 0: y = 0; break;
case 1: y = 1; break;
default: y = -1;
}
//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;
}