java - 范围为int的switch语句

时间:2015-03-06 05:40:31

标签: java if-statement integer switch-statement range

我想使用switch语句检查一些数字,我发现有几个地方有类似的东西 case 1...5case (score >= 120) && (score <=125)会起作用但我只是不知何故会继续犯错误。

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

我可以做if语句,但如果可能的话,可以开始使用switch。

4 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:2)

您可以使用三元运算符? :

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
}

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