范围为int的java-switch语句

范围为int的java-switch语句,java,if-statement,integer,switch-statement,range,Java,If Statement,Integer,Switch Statement,Range,我想用一个switch语句来检查一系列数字,我发现一些地方说 case1…5或case(score>=120)和&(score据我所知,在Java中切换case不可能使用范围 switch (num) { case 1: case 2: case 3: //stuff break; case 4: case 5: case 6: //more stuff break; default: } 但在这一点上,您最好还是使用if语句。您可以使用三元运算符

我想用一个switch语句来检查一系列数字,我发现一些地方说
case1…5
case(score>=120)和&(score据我所知,在Java中切换case不可能使用范围

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
}

JVM级别上的
int num=(score>=120)和&(score=1600)和&(scoreswitch
语句与if语句根本不同。

开关是关于编译时常量的,这些常量必须在编译时全部指定,以便javac编译器生成高效的字节码

在Java
中,switch
语句不支持范围。
您必须指定所有值(您可能会利用这些情况)和
默认值
大小写。任何其他内容都必须由
if
语句处理。

如果您真的想使用switch语句,这里有一种使用
枚举
创建伪范围的方法,因此您可以切换枚举

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

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);
    }
}

有“如果”的时间,也有“切换”的时间。这是“如果”的时间。
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;
}