0

我有一个原始问题,但我实际上不记得答案。

如果我使用 Switch Cases 而不是 IF\ELSE IF 会怎样。是否会评估所有案例或中断将突破整个 switch 案例并仅返回第一个满足的条件。

换句话说,如果我想检查某人是否有汽车、自行车和飞机怎么办。在我的特殊情况下,有人将所有三个都切换为true,或者它只会返回第一个案例并因为休息而忽略其余的案例?

对造成的不便表示歉意。

谢谢

4

8 回答 8

2

来自官方 Java 教程

每个break语句都终止封闭switch语句。

在您的特定情况下,如果某人有汽车、自行车或飞机,您应该构造更复杂的if\else语句。

但如果您仍然喜欢使用switch,您可以执行以下操作:

switch (possession)
{
    case CAR:
    case BIKE:
    case PLANE:
        doSomething();
    break;
}
于 2013-09-09T09:43:44.350 回答
1

它会在第一次匹配时爆发。在您的情况下,最好的办法是在 if 语句中使用逻辑运算符。

if (hasCar && hasBike && hasPlane)
{
...

}
于 2013-09-09T09:45:25.060 回答
1

break终止-switch语句。

此外,switch评估单个变量,你的情况对我来说听起来有点复杂。

于 2013-09-09T09:45:44.963 回答
1

当然 break 会在遇到后中断 switch-case 流程,first break statement如果没有找到 break 那么它将从第一个匹配的 case 开始执行所有语句,您可以在 case 内部实现逻辑。还有一点 switch case 比if-else 请参阅为什么 switch 比 if 更快

于 2013-09-09T09:46:24.253 回答
1

对于switch第一种情况,它会找到一个匹配项,然后无论是否匹配,只要您不使用break. 通过使用break,只有实际匹配的情况才会运行,而且几乎总是只有一个。因此,我不认为您的问题使用switch是一种好方法,因为您可以使用if-else.

于 2013-09-09T09:50:02.687 回答
0

也许您需要重写一种新的数据结构样式来确认这一点。我认为最简单的方法是使用布尔数组 (bool[]);

如果您有,请继续您的示例

Owner Class

, 有 bool bike, bool car, bool motocycle... 属性,你可以写一个

public bool[] ownArray() 

功能,可以评估。

我希望这有帮助。

于 2013-09-09T09:48:08.087 回答
0
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");
}
于 2013-09-09T09:48:24.107 回答
0

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):
于 2013-09-09T09:54:27.750 回答