我的意图是在同一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做到吗?
尽管您不能直接影响switch
的情况,但是您可以从一种情况调用switch的父方法并传递不同的参数。例如,
void foo(int param1, String param2, ...) {
switch (param1) {
case 0:
foo(1, "some string");
break;
case 1:
//do something
break;
default:
break;
}
}
否,您不能跳转在另一种开关情况下。但是,您可以将代码提取到自己的方法中,该方法可以从另一种情况调用:
switch (orderType) {
case 1:
someMethod1();
break;
case 2:
someMethod2();
break;
case 3:
someMethod1();
someMethod2();
break;
default:
break;
}
void someMethod1() { ... }
void someMethod2() { ... }
您不能只这样调用另一个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;
}
}
正如其他人指出的那样,您可以在带有参数的方法内实现切换案例,该参数对应于所需的切换案例。这些切换案例可以使用所需的切换案例递归地调用相同的方法。这是一个可以正常工作的示例,可让您检查年份是否为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;
}
}
}
使用方法是最佳方法,如已接受的答案所述,但是由于某些原因,如果您无法创建方法,这是不使用方法的另一种方法
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;
}
}
您可以在某些情况下使用此技巧:
switch (orderType) {
case 3:
statement 3;
case 2:
statement 2;
case 1:
statement 1;
break;
default:
break;`
}