我知道这个问题的答案是-1,但我不明白为什么会这样。有人可以帮我搞清楚吗?
int x = 0;
int y = 0;
switch (x + 1) {
case 0: y = 0;
case 1: y = 1;
default: y = -1
}
答案 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语句,所以当一个案例匹配时,那个案例之后的所有语句都会被执行。
答案 4 :(得分:0)
switch (x + 1) {
在这种情况下,x + 1
为1,因此切换跳转到case 1
并将y设置为1.由于break
之后没有y = 1
语句,代码将进入下一行,将y
设置为-1