有什么办法可以将它改成switch语句吗?

时间:2016-03-14 18:44:33

标签: java

我需要帮助将此代码转换为交换机。

if(val >= 0 && val < 10) 
    cell[0].plus1();
else if(val >= 10 && val < 20 )
    cell[1].plus1();
else if(val >= 20 && val < 30 )
    cell[2].plus1();
else if(val >= 30 && val < 40 )
    cell[3].plus1();
else if(val >= 40 && val < 50 )
    cell[4].plus1();
else if(val >= 50 && val < 60 )
    cell[5].plus1();
else if(val >= 60 && val < 70 )
    cell[6].plus1();
else if(val >= 70 && val < 80 )
    cell[7].plus1();
else if(val >= 80 && val < 90 )
    cell[8].plus1();
else if(val >= 90 && val < 100 )
    cell[9].plus1();

任何帮助都将受到高度赞赏。

4 个答案:

答案 0 :(得分:13)

您不需要切换声明。

所有这些陈述都可以简化为:

if (val >= 0 && val < 100)
    cell[val/10].plus1();

答案 1 :(得分:1)

如果你真的想要switch,你可以这样做:

int v = val/10;
switch(v) {
case 1: cell[1].plus1();
    break;
case 2: cell[2].plus1();
    break;
case 3: cell[3].plus1();
    break;
case 4: cell[4].plus1();
    break;
case 5: cell[5].plus1();
    break;  
case 6: cell[6].plus1();
    break;  
case 7: cell[7].plus1();
    break;  
case 8: cell[8].plus1();
    break;  
case 9: cell[9].plus1();
    break;  
}

但你可以简单地做(相当于):

if (val >= 0 && val < 100) cell[val/10].plus1();

答案 2 :(得分:0)

int division = val / 10;
now val >=0 && val < 10 equals division = 0

等...

答案 3 :(得分:0)

由于switch语句中的情况是由相等性确定的,因此使用不等式的if-else梯形图自然不能通过switch语句建模。

您可以列出范围中的每个值并使用直通性质:

switch (val)
    {
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
        cell[0].plus1();
        break;
    case 10:
    case 11:
    case 12:
    case 13:
    case 14:
    case 15:
    case 16:
    case 17:
    case 18:
    case 19:
        cell[1].plus1();
        break;
    ...
    }

这对你的代码没有任何改进,很快变得非常笨拙。

由于您的每个条件都执行完全相同的操作(cell[ X ].plus1()),因此您真正需要的是处理输入val和数组索引之间的关系。正如Eran's answer所示,在您的代码中,这种关系是一个简单的整数除法问题。我建议选择他的答案。