Java中的切换:我可以在案例中包含条件吗?

Cod*_*123 6 java

这是我的代码:

switch(age) {
    case 10:
        System.out.println("You are too young to drive.");
        break;
    case 20:
        System.out.println("You can drive!");
        break;
    default:
        System.out.println("Error");
}
Run Code Online (Sandbox Code Playgroud)

如果年龄是15岁会怎么样?好吧,它给了我一个错误.所以我想知道是否有可能在案件中包含一个条件.例如,

case (age>=10 && age<=20):
   System.out.println("You're still too young to drive...");
   break;
Run Code Online (Sandbox Code Playgroud)

我可以使用if语句,但我想知道这是否可以通过一个开关.

Ell*_*sch 9

case 需要一个常量表达式

不,这是不可能的,因为case必须是一个恒定的表达.但你可以(正如你猜测的那样)使用if.从逻辑上讲,任何人20(假设法定年龄)都太小,不能开车.

final int drivingAge = 20;
if (age < drivingAge) {
    System.out.printf("%d is too young to drive...%n", age);
} else {
    System.out.printf("%d is old enough to drive.%n", age);
}
Run Code Online (Sandbox Code Playgroud)

另外

这可以用? :条件运算符(也就是三元表达式 ; 注意有些人发现难以阅读的三元组)来编写

final int drivingAge = 20;
System.out.printf(age < drivingAge ? "%d is too young to drive...%n"
        : "%d is old enough to drive.%n", age);
Run Code Online (Sandbox Code Playgroud)

  • @Will:似乎很苛刻地向某人倾斜,因为1)风格偏好和2)附加而不是答案的核心部分.在许多情况下,最好缩小范围,以避免吸引负面注意力对于非核心材料.请注意,在这种情况下,条件表达式是DRYer. (5认同)

MrM*_*sen 6

由于跌倒,您可以这样做:

switch(age){
    case 10:  
    case 11:
    case 12:
    case 13:
    case 14:
    case 15:
    case 16:
    case 17:
    case 18:
    case 19:
        System.out.println("You are too young to drive.");
        break;  
    case 20:
        System.out.println("You can drive!");
        break;
    default:
        System.out.println("Error");
}
Run Code Online (Sandbox Code Playgroud)

这是一个多一点的代码,但它完成了同样的事情。

  • 我想,OP 假设任何 20 * 或以上 * 的人都可以开车。 (4认同)
  • @Code123 不,它是用跳转表实现的,它是*高效*的代码。但没有比 `if` 更有效的(在 **Java** 中)(至少在 JITing 和通用基准测试中的热身之后)。 (2认同)

Tag*_*eev 4

不,在 Java 中你不能这样做。使用if语句代替。与您想要的结构类似的结构存在于其他语言(如Scala )中。