我想在java中编写一些代码,这些代码可以在交换机中或者多次调用同一个案例,使用的代码对于中间的大多数或所有情况都是相同的。现在我必须为每个案例重复一半的代码,因为它被区分大小写的代码所包围。我脑子里的代码看起来像这样,变量范围从0到3,break只是意味着停止执行直到下一次调用那个案例,我明白它可能是除了break之外的东西,如果它存在,
switch(variable){
case 0:
case 1:
if(other factors)
//add item to next spot in array
case 2:
case 3://all cases
//add items to next 3 spots in array for all cases
break;
case 0:
case 1:
if(other factors)
//add item to next spot in array
case 2:
case 3://all cases
//add more items to next spot in array
break;
case 1:
case 2:
if(other factors2)
//add item to next spot in array
break;
case 3:
//add item to next spot in array
case 0:
case 1:
case 2://all cases
//add items to next spot in array
break;
case 1:
case 2:
if(other factors2)
//add item to next spot in array
break;
case 3:
//add item to next spot in array
}
答案 0 :(得分:3)
我首先将你的伪开关拆分成真正的开关:
switch(variable){
case 0:
case 1:
if(other factors)
//add item to next spot in array
case 2:
case 3://all cases
//add items to next 3 spots in array for all cases
}
switch(variable){
case 0:
case 1:
if(other factors)
//add item to next spot in array
case 2:
case 3://all cases
//add more items to next spot in array
}
switch(variable){
case 1:
case 2:
if(other factors2)
//add item to next spot in array
break;
case 3:
//add item to next spot in array
case 0:
}
switch(variable){
case 1:
case 2://all cases
//add items to next spot in array
break;
case 1:
case 2:
if(other factors2)
//add item to next spot in array
}
这应该符合您的要求。
然后我会用自己的方法提取每个开关块,以便更容易理解和阅读。
您可以考虑将所有这些提取为一个小类hirachy:
class DefaultExecutor{
void do(){
step1();
step2();
step3();
step4();
}
void step1(){//all cases class of the first switch statement}
//... similar methods for the other switcht statements
}
class CaseZeor extends DefaultExecutor{
// override step1-4 as required for special treatment of case 0
}
// ... further classes for cases 1-3
答案 1 :(得分:1)
您可以使用多个switch语句执行此操作。使用break;
时,无论如何都会丢弃开关块。
答案 2 :(得分:1)
Switch不适合这种情况,您需要使用一些if-else
语句(或Peter所说的某些单独的switch语句)执行检查。
来自JLS:
与switch语句关联的两个case常量表达式中没有两个可能具有相同的值。