在switch case /转换ifs to switch语句中有多个值

时间:2011-12-02 16:14:55

标签: java switch-statement

我有一个很大的Ifs列表,我想把它改成一个switch语句。目前它看起来像这样:

if(x == 1){
    ...
}
if(x == 2){
    ...
}
if(myArray.contains(x)){
    ...
}

实际上它比这要长一点,但是如果在示例中让我感到困惑的是第三个 - 如何改变它以使其在交换机中工作,或者甚至可能?

5 个答案:

答案 0 :(得分:17)

您可以根据代码中可能的退出条件执行此类操作,但是YMMV:

switch (x) {
case 1: 
  ...
  break;
case 2:
  ...
  break;
case 3:
case 4:
  ... multi-case
  break;
default:
  if(myArray.contains(x)){
    ...
  }
}

答案 1 :(得分:3)

Switch语句只能用于测试x

的相等性

因此,如果not equality conditions喜欢(if(myArray.contains(x)))必须在最后,那么你可以将其粘贴到开关的默认部分

看起来会这样

    switch (x) {
     case 1:   ...; break;
     case 2:   ...; break;
     default: if(myArray.contains(x)) ...
    }

如果not equality conditions需要在中间,则无法使用开关。

参考:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

答案 2 :(得分:1)

您只能切换x值。这意味着最后一个条件不会成为交换机的一部分:

switch(x) {
case 1:
    ...
    break;
case 2:
    ...
    break;
}
if(myArray.contains(x)){
    ...
}

答案 3 :(得分:1)

是的,有可能。 switch语句将使它更清洁,更易于维护。你必须担心x,因为它必须是编译时常量。

switch(x) {
 case 1:
    doSomething();
    break();
 case 2:
    doSomethingElse();
    break();

default:
 if(myArray.contains(x)){

 }


//etc...
}

答案 4 :(得分:0)

这看起来不太面向对象。

尝试使用“使用多态替换条件”来重构代码 http://martinfowler.com/refactoring/catalog/replaceConditionalWithPolymorphism.html

如果需要从int转换为自定义对象,地图可以帮助您进行一些查找。