在Java中,我是否只能通过switch
语句中的一个案例?我理解,如果我break
,我会落到switch
声明的末尾。
这就是我的意思。鉴于以下代码,在案例2中,我想执行案例2和案例1.在案例3中,我想执行案例3和案例1,但不是案例2。
switch(option) {
case 3: // code
// skip the next case, not break
case 2: // code
case 1: // code
}
答案 0 :(得分:11)
不,使用switch
声明无法完成您的工作。在您点击case
之前,您将逐渐落到每个break
。也许您希望case 1
超出您的switch
语句,以便它可以执行。
答案 1 :(得分:10)
将代码放入方法中并根据需要调用。按照你的例子:
void case1() {
// Whatever case 1 does
}
void case2() {
// Whatever case 2 does
}
void case3() {
// Whatever case 3 does
}
switch(option) {
case 3:
case3();
case1();
break;
case 2:
case2();
case1();
break;
case 1:
case1(); // You didn't specify what to do for case 1, so I assume you want case1()
break;
default:
// Always a good idea to have a default, just in case demons are summoned
}
当然case3()
,case2()
...是非常糟糕的方法名称,您应该重命名为对该方法实际执行的内容更有意义的内容。
答案 2 :(得分:9)
我的建议是不要对任何使用fallthrough,除了以下情况:
switch (option) {
case 3:
doSomething();
break;
case 2:
case 1:
doSomeOtherThing();
break;
case 0:
// do nothing
break;
}
也就是说,给几个案例完全相同的代码块来处理它们(通过“堆叠”case
标签),使得这里的流程或多或少变得明显。我怀疑大多数程序员直观地检查案例是否通过(因为缩进使案例看起来像一个正确的块)或者可以有效地读取依赖它的代码 - 我知道我没有。
答案 3 :(得分:1)
switch(option)
{
case 3:
...
break;
case 2:
...
break;
}
... // code for case 1
答案 4 :(得分:0)
如果你想拆分案例,你可以自定义条件
const { type, data } = valueNotifications
let convertType = ''
if (data?.type === 'LIVESTREAM' && type === 'NORMAL') {
convertType = 'LIVESTREAM1'
} else convertType = type
switch (convertType)
我的用例已将类型从值通知中分离出来,但我有一个特定的 LiveStream 案例,它只显示在 data.type 中是“LIVESTREAM”
答案 5 :(得分:-1)
这样的事可能。
switch(option) {
case 3: // code
// skip the next case, not break
// BLOCK-3
case 2: // code
if(option == 3) break;
// BLOCK-2
case 1: // code
// BLOCK-1
}
答案 6 :(得分:-2)
在switch语句中,如果您不break
,则执行后续案例。举个简单的例子
int value = 2;
switch(value) {
case 1:
System.out.println("one");
break;
case 2:
System.out.println("two");
case 3:
System.out.println("three");
break;
}
将输出
two
three
因为break
已在案例2中执行