如何在switch语句中创建一个案例子组?

时间:2017-07-02 18:58:50

标签: java switch-statement

对于一个开关案例,想象一下我有5个不同的案例,其中三个共享一个我不想重复的共同行动。以下代码完美地说明了我想要实现的目标(但在交换机中):

    int x = 5;
    if(x == 1) {
        System.out.println("one");
    } else if (x == 2) {
        System.out.println("two");
    } else {
        String common = "thirty-";
        if (x == 3) {
            method_one(common);
        } else if (x == 4) {
            method_two(common);
        } else if (x == 5) {
            method_three(common);
        }
    }

我可以优雅地将其写为开关盒吗?我目前的解决方案如下:

    int[] smallGroup = {1,2};
    if (!Arrays.asList(smallGroup).contains(x))
            common = "thiry-";

1 个答案:

答案 0 :(得分:0)

  

对于一个开关盒,想象一下我有5种不同的情况,其中有三种   分享一个我不想重复的共同行动。

在switch-case块中对案例进行分组的常用方法是简单地将案例标签组合在一起。没有规则强制每个case标记必须紧跟一个代码块。

这在下面的代码块中说明,它将分数天数转换为小时:分:秒:毫秒。 MINUTES和SECONDS案例的代码是共享的,它们的案例组合在一起:

// HOURS, MINUTES, SECONDS, AND MILLIS are integer constants; f is a fractional day

    for (int i = HOURS; i <= MILLIS; i++) {
        switch (i) {
            case HOURS:
                f = f * 24.0;
                break;
            case MINUTES:  case SECONDS:
                f = f * 60.0;
                break;
            case MILLIS:
                f = f * 1000.0;
                break;
        }
        x = trunc(f);         // trunc() here is equivalent to Math.floor()
        hmsm[i] = (int) x;    // hmsm[] is the result array
        f = f - x;
    }

顺便说一下,有一种更优雅的方法可以将小数日转换为H:M:S:M,带有整数运算,但上面是说明性的。