【问题标题】:Java switch - varying conditional operatorsJava switch - 不同的条件运算符
【发布时间】:2015-04-06 01:45:00
【问题描述】:

我发现了一些“有点”相关的问题,但我不确定我的需求是否完全符合这些问题。所以,我要做的是用 SWITCH/CASE 清理下面的 IF/ELSE IF 语句。有没有办法在 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;
}

【问题讨论】:

  • 我投票 +1 只是因为那句话太……哇。

标签: java if-statement switch-statement conditional-operator


【解决方案1】:

case 子句中只能有一个表达式。所以不,你不能以你想象的漂亮方式做到这一点。

请参阅有关 switch 的 Javadocs

您可以做的最接近的事情是:

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

【讨论】:

    【解决方案2】:

    正如 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;
        }
    }
    

    比较干净

    【讨论】:

    • 这样干净多了...谢谢!!
    猜你喜欢
    • 2014-08-11
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 2014-10-19
    • 2018-03-21
    相关资源
    最近更新 更多