java – 范围为int的switch语句

我想用一个switch语句检查一些数字,我发现有几个地方说类似case 1...5case (score >= 120) && (score <=125)会起作用但我只是以某种方式保持在获得错误。

我想要的是如果数字在1600-1699之间然后做点什么。

我可以做if语句,但是如果可能的话,我觉得是时候开始使用switch了。

在JVM级别上, switch语句与if语句根本不同。

Switch是关于必须在编译时指定的编译时常量,以便javac编译器生成有效的字节码。

在Java中, switch语句不支持范围。 您必须指定所有值(您可能会利用掉落的情况)和default情况。 其他任何东西都必须由if语句处理。

据我所知,Java中的交换机案例不可能使用范围。 你可以做点什么

 switch (num) { case 1: case 2: case 3: //stuff break; case 4: case 5: case 6: //more stuff break; default: } 

但在那时,你可能会坚持使用if语句。

你可以使用三元运算符, ? : ? :

 int num = (score >= 120) && (score <=125) ? 1 : -1; num = (score >= 1600) && (score <=1699 ) ? 2 : num; switch (num) { case 1 : break; case 2 : break; default : //for -1 } 

如果你真的想使用switch语句 – 这里是一种用enum创建伪范围的方法,所以你可以切换枚举。

首先,我们需要创建范围:

 public enum Range { TWO_HUNDRED(200, 299), SIXTEEN_HUNDRED(1600, 1699), OTHER(0, -1); // This range can never exist, but it is necessary // in order to prevent a NullPointerException from // being thrown while we switch private final int minValue; private final int maxValue; private Range(int min, int max) { this.minValue = min; this.maxValue = max; } public static Range getFrom(int score) { return Arrays.asList(Range.values()).stream() .filter(t -> (score >= t.minValue && score <= t.maxValue)) .findAny() .orElse(OTHER); } } 

然后你的开关:

 int num = 1630; switch (Range.getFrom(num)) { case TWO_HUNDRED: // Do something break; case SIXTEEN_HUNDRED: // Do another thing break; case OTHER: default: // Do a whole different thing break; }