WXR*_*WXR 7 java integer if-statement range switch-statement
我想使用switch语句检查一些数字,我发现有几个地方说类似
case 1...5
或case (score >= 120) && (score <=125)
会起作用,但我只是不知何故继续得到错误.
我想要的是如果数字在1600-1699之间然后做某事.
我可以做if语句,但是如果可能的话,我觉得是时候开始使用switch了.
Cra*_*ing 10
在JVM级别switch
语句与if语句根本不同.
Switch是关于必须在编译时指定的编译时常量,以便javac编译器生成有效的字节码.
在Java switch
语句中不支持范围.您必须指定所有值(您可能会利用掉落在案例中)和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
}
Run Code Online (Sandbox Code Playgroud)
据我所知,Java中的交换机案例不可能使用范围.你可以做点什么
switch (num) {
case 1: case 2: case 3:
//stuff
break;
case 4: case 5: case 6:
//more stuff
break;
default:
}
Run Code Online (Sandbox Code Playgroud)
但在那时,你可能会坚持使用if语句.
如果你真的想使用 switch 语句——这里有一种用enum
s创建伪范围的方法,这样你就可以切换枚举。
首先,我们需要创建范围:
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 from(int score) {
return Arrays.stream(Range.values())
.filter(range -> score >= range.minValue && score <= range.maxValue)
.findAny()
.orElse(OTHER);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你的开关:
int num = 1630;
switch (Range.from(num)) {
case TWO_HUNDRED:
// Do something
break;
case SIXTEEN_HUNDRED:
// Do another thing
break;
case OTHER:
default:
// Do a whole different thing
break;
}
Run Code Online (Sandbox Code Playgroud)