2015-02-06 119 views
1

我发现了一些“有点”相关的问题,但我不确定我的需求是否完全符合这些问题。所以,我期望做的是用SWITCH/CASE清理以下IF/ELSE IF语句。有没有办法在Java开关中使用多个条件运算符,还是严格布尔值?Java开关 - 不同条件运算符

int alSize = Integer.parseInt(size); 

if (alSize == 7 && (alType == 1 || alType == 3)){ 
disp = 0.12; 
}else if (alSize == 9 && (alType == 1 || alType == 3 || alType == 4 || alType == 5)){ 
disp = 0.27; 
}else if (alSize == 9){ 
disp = 0.21; 
}else if (alSize == 11 && (alType == 1 || alType == 3 || alType == 4 || alType == 5)){ 
disp = 0.47; 
}else if (alSize == 11){ 
disp = 0.41; 
}else if (alSize == 12 && (alType == 1 || alType == 3 || alType == 4 || alType == 5)){ 
disp = 0.75; 
}else if (alSize == 12){ 
disp = 0.64; 
}else if (alSize == 14 &&(alType == 1 || alType == 3 || alType == 4 || alType == 5)){ 
disp = 1.10; 
}else if (alSize == 14){ 
disp = 0.96; 
}else if (alSize == 16 && (alType == 1 || alType == 3 || alType == 4 || alType == 5)){ 
disp = 1.60; 
}else if (alSize == 16){ 
disp = 1.40; 
}else if (alSize == 18 && (alType == 1 || alType == 3 || alType == 4 || alType == 5)){ 
disp = 2.60; 
}else if (alSize == 18){ 
disp = 2.30; 
}else if (alSize == 22 && (alType == 1 || alType == 3 || alType == 4 || alType == 5)){ 
disp = 4.0; 
}else if (alSize == 22){ 
disp = 3.60; 
}else if (alSize == 30 && (alType == 1 || alType == 3 || alType == 4 || alType == 5)){ 
disp = 9.9; 
}else if (alSize == 30){ 
disp = 9.2; 
} 
+0

我VOT只是因为这个陈述是如此......哇。 – 2015-02-06 01:11:32

回答

4

的kon说,你不能把它简化成一个非常简单的开关/箱,但你可以做这样的事情:

boolean typeIs1345 = (alType == 1 || alType == 3 || alType == 4 || alType == 5); 

    switch (alSize) 
    { 
     case 7: 
      if (alType == 1 || alType == 3) 
       disp = 0.12; 
      break; 
     case 9: 
      disp = typeIs1345 ? 0.27 : 0.21; 
      break; 
     case 11: 
      disp = typeIs1345 ? 0.47 : 0.41; 
      break; 
     case 12: 
      disp = typeIs1345 ? 0.75 : 0.64; 
      break; 
     case 14: 
      disp = typeIs1345 ? 1.1 : 0.96; 
      break; 
     case 16: 
      disp = typeIs1345 ? 1.6 : 1.4; 
      break; 
     case 18: 
      disp = typeIs1345 ? 2.6 : 2.3; 
      break; 
     case 22: 
      disp = typeIs1345 ? 4.0 : 3.6; 
      break; 
     case 30: 
      disp = typeIs1345 ? 9.9 : 9.2; 
      break; 
    } 
} 

这是相当干净

+0

这种方式更清洁...谢谢你! – jbeckom 2015-02-06 01:21:22

0

case子句中只能有一个表达式。所以不,你不能用你想象中的美丽方式去做。

请参阅Javadoc约switch

你可以做的最接近的事是一样的东西:

switch (value) 
    { 
     case 1: 
     case 2: 
      //Operation if value is 1 or 2 
     break; 
    }