我有一个原始问题,但我实际上不记得答案。
如果我使用 Switch Cases 而不是 IF\ELSE IF 会怎样。是否会评估所有案例或中断将突破整个 switch 案例并仅返回第一个满足的条件。
换句话说,如果我想检查某人是否有汽车、自行车和飞机怎么办。在我的特殊情况下,有人将所有三个都切换为true,或者它只会返回第一个案例并因为休息而忽略其余的案例?
对造成的不便表示歉意。
谢谢
我有一个原始问题,但我实际上不记得答案。
如果我使用 Switch Cases 而不是 IF\ELSE IF 会怎样。是否会评估所有案例或中断将突破整个 switch 案例并仅返回第一个满足的条件。
换句话说,如果我想检查某人是否有汽车、自行车和飞机怎么办。在我的特殊情况下,有人将所有三个都切换为true,或者它只会返回第一个案例并因为休息而忽略其余的案例?
对造成的不便表示歉意。
谢谢
来自官方 Java 教程:
每个
break
语句都终止封闭switch
语句。
在您的特定情况下,如果某人有汽车、自行车或飞机,您应该构造更复杂的if\else
语句。
但如果您仍然喜欢使用switch
,您可以执行以下操作:
switch (possession)
{
case CAR:
case BIKE:
case PLANE:
doSomething();
break;
}
它会在第一次匹配时爆发。在您的情况下,最好的办法是在 if 语句中使用逻辑运算符。
if (hasCar && hasBike && hasPlane)
{
...
}
break
终止-switch
语句。
此外,switch
评估单个变量,你的情况对我来说听起来有点复杂。
当然 break 会在遇到后中断 switch-case 流程,first break statement
如果没有找到 break 那么它将从第一个匹配的 case 开始执行所有语句,您可以在 case 内部实现逻辑。还有一点 switch case 比if-else 请参阅为什么 switch 比 if 更快
对于switch
第一种情况,它会找到一个匹配项,然后无论是否匹配,只要您不使用break
. 通过使用break
,只有实际匹配的情况才会运行,而且几乎总是只有一个。因此,我不认为您的问题使用switch
是一种好方法,因为您可以使用if-else
.
也许您需要重写一种新的数据结构样式来确认这一点。我认为最简单的方法是使用布尔数组 (bool[]);
如果您有,请继续您的示例
Owner Class
, 有 bool bike, bool car, bool motocycle... 属性,你可以写一个
public bool[] ownArray()
功能,可以评估。
我希望这有帮助。
myEnum = 3;
...
switch (myEnum) {
case 1: System.out.println("This will not print"); break;
case 2: System.out.println("This will not print"); break;
case 3: System.out.println("This will print!"); //no break!
case 4: System.out.println("So will this, because there wasn't a break"); break;
case 5: System.out.println("But this won't, there was a break");
}
Java 中的 Switch-case 可以一次评估一个案例。当它进入其中一个案例时,它将继续执行下一个语句(不管这些语句是否是其他案例的一部分);直到它停下来;
简而言之,switch 语句为您提供了测试变量值范围的选项。它们可以用来代替冗长、复杂的 if ... else if 语句。switch 语句的结构是这样的:
switch ( variable_to_test ) {
case value1: code_here1;
break;
case value2: code_here2;
case value3: code_here3;
break;
default:
values_not_caught_above;
}
在上面的例子中,如果 value2 满足,它也会执行 code_here2 和 code_here3(因为没有 break 语句)
可悲的是,您无法在 case 之后测试一系列值,而只能测试一个值。所以你不能这样做:
case (user <= 18):