开发者社区> 问答> 正文

if转switch结构

今天面试,面试官给了一道题,让把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;
    }

展开
收起
a123456678 2016-06-12 10:39:32 1919 0
1 条回答
写回答
取消 提交回答
  • 首先,请允许我把题主的代码块包在一个函数里(方便测试):
    
    var org = function(s) {
      var x;
      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;
      return x;
    };
    然后大家有没有注意到,我可以把代码简化成这样:
    
    var org = function(s) {
      var x;
      if (s > 0 && s <= 10) {
        if (s >= 3 && s <= 6)
          x = 2;
        else
          x = 3;
      }
      else
        x = 0;
      return x;
    };
    s > 1 || s < 8任何情况下都只能是true
    那么,换成switch的函数:
    
    var test = function(s) {
      var x;
      switch (s > 0 && s <= 10) {
        case true:
          switch (s >= 3 && s <= 6) {
            case true:
              x = 2;
              break;
            default:
              x = 3;
              break;
          }
          break;
        default:
          x = 0;
          break;
      }
      return x;
    }
    其实都不用测试的,不过为了严谨,我还是测试过了,没问题。
    大家也可以将这两个函数复制出来测试一下 :P
    
    希望能够帮助到你~ XD
    
    经@mcfog指点,又优化了一下,这个答案会比我之前的那个更合适:
    
    全选复制放进笔记var best = function(s) {
      var x;
      switch (true) {
        case !(s > 0 && s <= 10):
          x = 0;
          break;
        case s >= 3 && s <= 6:
          x = 2;
          break;
        default:
          x = 3;
          break;
      }
      return x;
    }
    2019-07-17 19:33:24
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载