我需要帮助将此代码转换为交换机。
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();
任何帮助都将受到高度赞赏。
答案 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所示,在您的代码中,这种关系是一个简单的整数除法问题。我建议选择他的答案。