Java:我可以在switch语句中只涉及一个案例

时间:2013-03-25 02:08:47

标签: java switch-statement

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

7 个答案:

答案 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中执行