如果我需要评估几个案例,我可以在Java而不是IF中使用switch case

时间:2013-09-09 09:40:56

标签: java if-statement switch-statement conditional-statements

我有一个原始问题,但实际上我无法回想起答案。

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

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

很抱歉给您带来不便。

谢谢

8 个答案:

答案 0 :(得分:2)

来自Official Java Tutorials

  

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

在您的特定情况下,如果有人有汽车,自行车或飞机,您应该构建更复杂的if\else声明。

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

switch (possession)
{
    case CAR:
    case BIKE:
    case PLANE:
        doSomething();
    break;
}

答案 1 :(得分:1)

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

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

}

答案 2 :(得分:1)

break终止switch - 语句。

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

答案 3 :(得分:1)

肯定break会在遇到first break statement之后打破switch-case流如果没有找到中断那么它将从第一个匹配的情况开始执行所有语句,你可以在case中实现逻辑。一件事更多的开关案例比if-else快一点 请参阅Why switch is faster than if

答案 4 :(得分:1)

使用switch第一种情况,如果您不使用break,则会发现匹配运行,然后是所有以下情况,无论是否匹配。通过使用break,只有实际的匹配案例运行,并且几乎总是只有一个。因此,我不认为使用switch作为一种好方法可以解决您的问题,因为您可以使用if-else更好地处理它。

答案 5 :(得分:0)

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

如果您有

,请继续您的示例
Owner Class

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

public bool[] ownArray() 

功能,可以评估。

我希望这会有所帮助。

答案 6 :(得分: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");
}

答案 7 :(得分:0)

java中的switch-case可以一次评估一个案例。在它进入其中一个案例的那一刻,它将继续执行下一个陈述(无论如何,如果这些陈述是其他案件的一部分);直到它休息一下;

简而言之,一个switch语句为您提供了测试变量值范围的选项。它们可以用来代替long,复杂的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 (user <= 18):