Switch 语句默认情况失败
Switch Statement Default Case Fall Through
这里有一个小小的困惑,请原谅我的无知。这是一个代码片段。
public class SwitchTest {
public static void main(String[] args) {
int x = 2;
switch (x) {
case 1:
System.out.println("1");
break;
default:
System.out.println("helllo");
case 2:
System.out.println("Benjamin");
break;
}
}
}
此处,如果x的值为2,则只打印Benjamin
。那很好。现在让我们假设,我更改 x to 3
的值,不匹配任何大小写,而不是 its a fall through from default case
。编译器不需要匹配 3 的所有情况,到那时 CASE 2
将通过,而不是为什么它返回默认值并打印 hello Benjamin。有人可以解释一下吗?
谢谢,
它打印两个字符串,因为您在 default
的情况下没有 break
,所以它继续到 case 2
,打印 Benjamin。您可以通过添加 break
或将 case 2
移动到 default
大小写上方来解决此问题。
您需要添加 break;
语句以跳出 switch
块。
switch (x) {
case 1:
System.out.println("1");
break;
default:
System.out.println("helllo");
break; // <-- add this here
case 2:
System.out.println("Benjamin");
break;
}
一般来说,将您的 default:
案例作为 switch
块中的最后一个案例也是更好的编码习惯。
在这种情况下,开关遵循以下模式:
x==1? No, check next case
default? Not done yet, check other cases
x==2? No, check next case
//No more cases, so go back to default
default? Yes, do default logic
// no break statement in default, so it falls through to case 2: logic without checking the case
output case 2 logic
break
注意该块将如何跳过默认情况,并将其保存到稍后,除非我们已经用尽所有其他可能的情况。
'switch' case 是 'if-then-else' 的另一种形式,默认 case 用于最后的 else 部分。建议在switch最后写default。
最后选中默认值。这就是为什么感觉编译器 'went' 回来了。
这里有一个小小的困惑,请原谅我的无知。这是一个代码片段。
public class SwitchTest {
public static void main(String[] args) {
int x = 2;
switch (x) {
case 1:
System.out.println("1");
break;
default:
System.out.println("helllo");
case 2:
System.out.println("Benjamin");
break;
}
}
}
此处,如果x的值为2,则只打印Benjamin
。那很好。现在让我们假设,我更改 x to 3
的值,不匹配任何大小写,而不是 its a fall through from default case
。编译器不需要匹配 3 的所有情况,到那时 CASE 2
将通过,而不是为什么它返回默认值并打印 hello Benjamin。有人可以解释一下吗?
谢谢,
它打印两个字符串,因为您在 default
的情况下没有 break
,所以它继续到 case 2
,打印 Benjamin。您可以通过添加 break
或将 case 2
移动到 default
大小写上方来解决此问题。
您需要添加 break;
语句以跳出 switch
块。
switch (x) {
case 1:
System.out.println("1");
break;
default:
System.out.println("helllo");
break; // <-- add this here
case 2:
System.out.println("Benjamin");
break;
}
一般来说,将您的 default:
案例作为 switch
块中的最后一个案例也是更好的编码习惯。
在这种情况下,开关遵循以下模式:
x==1? No, check next case
default? Not done yet, check other cases
x==2? No, check next case
//No more cases, so go back to default
default? Yes, do default logic
// no break statement in default, so it falls through to case 2: logic without checking the case
output case 2 logic
break
注意该块将如何跳过默认情况,并将其保存到稍后,除非我们已经用尽所有其他可能的情况。
'switch' case 是 'if-then-else' 的另一种形式,默认 case 用于最后的 else 部分。建议在switch最后写default。
最后选中默认值。这就是为什么感觉编译器 'went' 回来了。