今天面试,面试官给了一道题,让把if结构转成switch
if(s>0&&s<=10)
{
if(s>=3&&s<=6)
x=2;
else if(s>1||s<8)
x=3;
else
x=1;
}
else
x=0;
我的答案如下:
k=(s>0&&s<=10)?((s>=3&&s<=6)? 2:((s>1||s<8)?3:1)):0;
switch(k)
{
case 0:x=0;break;
case 1:x=1;break;
case 2:x=2;break;
case 3:x=3;break;
}
面试官看了之后说你这个不用switch就已经做出来了呀,还用switch干啥呢,我想了想也是呀,通过三目运算就把结果求出来了,把k换成x就搞定了。
我自己想了想,毫无头绪,区间划分那么乱,不能对数s整除,然后switch case。
直接贴代码,直接贴代码,直接贴代码!
if转成switch后,不能含有if else,真想去问问面试官,这该如何实现.
思路是嵌套switch,之前一直没注意可以嵌套switch语句.
switch (s > 0 && s <= 10)
{
case 1:
switch (s >= 3 && s <= 6)
{
case 1:
x = 2;
break;
default:
x = 3;
break;
}
break;
default:
x = 0;
break;
}
首先,请允许我把题主的代码块包在一个函数里(方便测试):
然后大家有没有注意到,我可以把代码简化成这样:
s > 1 || s < 8
任何情况下都只能是true
那么,换成
switch
的函数:其实都不用测试的,不过为了严谨,我还是测试过了,没问题。
大家也可以将这两个函数复制出来测试一下 :P
希望能够帮助到你~ XD
经@mcfog指点,又优化了一下,这个答案会比我之前的那个更合适: