18

在 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
}
4

7 回答 7

13

不,你所追求的东西是不可能的switch。你会跌倒每一个case,直到你击中一个break。也许您想case 1在您的switch语句之外,以便它无论如何都被执行。

于 2013-03-25T02:10:45.590 回答
12

将代码放入方法并酌情调用。按照你的例子:

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()... 是非常糟糕的方法名称,您应该将其重命名为更有意义的名称,以了解该方法的实际作用。

于 2013-03-25T02:10:25.973 回答
11

我的建议是除了以下情况外,不要对任何事情使用 fallthrough :

switch (option) {
    case 3:
        doSomething();
        break;
    case 2:
    case 1:
        doSomeOtherThing();
        break;
    case 0:
        // do nothing
        break;
}

也就是说,为几个案例提供完全相同的代码块来处理它们(通过“堆叠”case标签),使这里的流程或多或少显而易见。我怀疑大多数程序员会直观地检查大小写是否通过(因为缩进使大小写看起来像一个正确的块)或者是否可以有效地读取依赖它的代码 - 我知道我没有。

于 2013-03-25T02:23:39.877 回答
1
switch(option) 
{
    case 3:
        ...
        break;
    case 2: 
        ...
        break;
}

... // code for case 1
于 2013-03-25T02:20:07.007 回答
0

如果要拆分案例,可以自定义条件

const { type, data } = valueNotifications

    let convertType = ''
    if (data?.type === 'LIVESTREAM' && type === 'NORMAL') { 
      convertType = 'LIVESTREAM1' 
    } else convertType = type 

    switch (convertType) 

我的用例已将类型与值通知分开,但我有一个特定的 LiveStream 案例,仅在 data.type 中显示为“LIVESTREAM”

于 2021-05-31T05:14:32.777 回答
-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
}
于 2013-03-25T02:16:39.023 回答
-2

在 switch 语句中,如果你不break执行后续的 case。举个简单的例子

    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 上执行

于 2013-03-25T02:19:00.337 回答