在Java中,我们可以在同一个switch语句中调用另一个case中的“case”吗?

vaqhlq81  于 2023-02-02  发布在  Java
关注(0)|答案(6)|浏览(367)

我的意图是在同一个switch语句中调用另一个case中的两个case,

switch (orderType) {
        case 1: 
            statement 1;
            break;
       case 2:
            statement 2;
            break;
       case 3:
             **call case 1;**
             **Call case 2;**
             break;
       default:
            break;`
}

我们能用Java实现吗?

irtuqstp

irtuqstp1#

不,你不能在另一个switch case中 * 跳转 * 到代码片段,但是你可以将代码提取到一个自己的方法中,这个方法可以在另一个case中调用:

switch (orderType) {
    case 1: 
        someMethod1();
        break;
    case 2:
        someMethod2();
        break;
    case 3:
        someMethod1();
        someMethod2();
        break;
    default:
        break;
}

void someMethod1() { ... }
void someMethod2() { ... }
rm5edbpk

rm5edbpk2#

尽管不能直接影响switch的case,但可以从一个case调用switch的父方法并传递不同的参数。

void foo(int param1, String param2, ...) {
    switch (param1) {
        case 0:
            foo(1, "some string");
            break;

        case 1:
            //do something
            break;

        default:
            break;
    }
}
5tmbdcev

5tmbdcev3#

你不能像这样调用另一个case代码块,但是你可以把这些代码块 Package 在一个方法中,然后重用它们:

private void doSomething() {
    // implementation
}

private void doSomethingElse() {
    // implementation
}

private void runSwitch(int order) {

    switch (orderType) {
           case 1: 
                doSomething();
                break;
           case 2:
                doSomethingElse();
                break;
           case 3:
                doSomething();
                doSomethingElse();
                break;
           default:
                break;
    }
}
a64a0gku

a64a0gku4#

使用方法是最好的方法,正如在可接受的答案中提到的那样,但由于某些原因,如果您无法创建方法,这里是另一种不使用方法的方法

boolean isBreakTheLoop = false, isCase2Required = false;
while(!isBreakTheLoop){
    switch (orderType) {
       case 1: 
            statement 1;
            if(isCase2Required){
               orderType = 2;
               break;
            }
            isBreakTheLoop = true;
            break;
       case 2:
            statement 2;
            isBreakTheLoop = true;
            break;
       case 3:
            orderType = 1;
            isCase2Required = true;
            break;
       default:
            isBreakTheLoop = true;
            break;
    }
}
inb24sb2

inb24sb25#

只是提醒一下:虽然最推荐的情况是最好的解决方案,但请注意,如果您没有以brake;结束您的case:,它将在下一个情况中继续执行。
然后,虽然它仍然是最好的实践打破你的情况下,你仍然可以采取类似的解决方案如下:

switch (orderType) {
    case 3:
        someMethod1();
    case 2:
        someMethod2();
        break;
    case 1: 
        someMethod1();
        break;
    default:
        break;
}

请注意,"避免中断"解决方案不能完全涵盖OP必需品,因为写入:

case 3:
    case 1:
        someMethod1();
    case 2:
        someMethod2();
    default:
        break;

或:

case 3:
    case 1:
        someMethod1();
        break;
    case 2:
        someMethod2();
        break;
    default:
        break;

将使case: 3case: 1相同,从而使它们执行第一个代码中的两个方法,或第二个代码中的单个方法。

2ledvvac

2ledvvac6#

您可以在某些情况下使用此技巧:

switch (orderType) {
   case 3: 
        statement 3;
   case 2:
        statement 2;
   case 1:
        statement 1;
        break;
   default:
        break;`

}

相关问题