1

Я нашел несколько «несколько» связанных с этим вопросов, но я не уверен, что мои потребности были полностью квалифицированы в этих вопросах. Итак, что я хочу сделать, это очистить следующую инструкцию IF/ELSE IF с помощью SWITCH/CASE. Есть ли способ использовать несколько условных операторов в 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

Я воть ed +1 только потому, что это утверждение так ... вау. –

ответ

4

Как сказал Кон, вы не можете упростить его в невероятно простой переключатель/случай, но вы может сделать что-то вроде этого:

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

0

Вы можете иметь только одно выражение в п case. Так что нет, вы не можете сделать это красиво, как вы себе представляете.

См Javadocs о switch

Ближайший вещь, которую вы можете сделать что-то вроде:

switch (value) 
    { 
     case 1: 
     case 2: 
      //Operation if value is 1 or 2 
     break; 
    } 
Смежные вопросы