对于一个开关案例,想象一下我有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-";
答案 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,带有整数运算,但上面是说明性的。