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

问题描述 投票:9回答:6

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

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

我们可以用Java做到吗?

java switch-statement
6个回答
8
投票

尽管您不能直接影响switch的情况,但是您可以从一种情况调用switch的父方法并传递不同的参数。例如,

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

        case 1:
            //do something
            break;

        default:
            break;
    }
}

6
投票

否,您不能跳转在另一种开关情况下。但是,您可以将代码提取到自己的方法中,该方法可以从另一种情况调用:

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

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

1
投票

您不能只这样调用另一个case块。但是,您可以做的是将这些块中的每个块包装在一个方法中,然后重用它们:

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

0
投票

正如其他人指出的那样,您可以在带有参数的方法内实现切换案例,该参数对应于所需的切换案例。这些切换案例可以使用所需的切换案例递归地调用相同的方法。这是一个可以正常工作的示例,可让您检查年份是否为a年:

public class LeapYear {

    static int year = 2016;

    public static void main(String[] args) {

        leapSwitch(1);

    }

    public static void leapSwitch(int switchcase) {

        switch (switchcase) {

        case 1: {
            if (year % 4 == 0) {
                leapSwitch(2);
            } else {
                leapSwitch(5);
            }
        }
            break;

        case 2: {
            if (year % 100 == 0) {
                leapSwitch(3);

            } else {
                leapSwitch(4);
            }
        }
            break;

        case 3: {
            if (year % 400 == 0) {
                leapSwitch(4);

            } else {
                leapSwitch(5);
            }
        }
            break;

        case 4: {
            System.out.println(year+ " is a leap year!");
        }
            break;

        case 5: {
            System.out.println("Not a leap year...");
        }
            break;

        }
    }
}

0
投票

使用方法是最佳方法,如已接受的答案所述,但是由于某些原因,如果您无法创建方法,这是不使用方法的另一种方法

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;
            break;
       default:
            isBreakTheLoop = true;
            break;
    }
}

-2
投票

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

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

}

© www.soinside.com 2019 - 2024. All rights reserved.