FizzBuzzWhizz

FizzBuzzWhizz题目需求:

when run (3) return 'Fizz'
when run(5) retunr 'Buzz'
when run(7) retunr 'Whizz'
when run(3×5) retunr 'FizzWhizz' //run 的参数为3和5共同的倍数
when run(3×7) retunr 'FizzBuzz' //run 的参数为3和7共同的倍数
when run(5×7) return 'BuzzWhizz' //run 的参数为5和7共同的倍数
when run(3×5×7) return 'FizzBuzzWhizz' //run 的参数为3和5和7共同的倍数
when run(n) return n //n 可以为非3,5,7或3,5,7的倍数的数字,如:run(2) return '2'

分析
tasking
测试数据及预期结果
input print
3 " F i z z "
5 " B u z z "
7 " W h i z z "
3 × 5 " F i z z B u z z "
3 × 7 " F i z z W h i z z "
5 × 7 " B u z z W h i z z "
3 × 5 × 7 " F i z z B u z z W h i z z"

从题目来看,这道题的逻辑并不复杂,无非是判定是否为3,5,7的倍数,再根据判定结果输出相应的字符串,判定是否为倍数可通过取模运算来实现;同时,根据题目要求,很明显可以看出,当输入数字为多个因子的公倍数时,输出的复杂字符串是由各个简单字符串根据不同的优先级进行拼接而成,那么可根据不同的优先级来调整其约数判定顺序,从而实现字符串的优先级排列。


我尝试用TDD的方式来编写代码,先写测试,再写实现,保证在每一次测试时都满足我的测试需求,再逐步添加需求,写出的代码如下:

function run(num){
    var result=num.toString();
    if(num%3==0){
        result="Fizz";
        if(num%5==0){
            result=result+"Buzz";
        }
        if(num%7==0){
            result=result+"Whizz";
        }
    }else if(num%5==0){
        result="Buzz";
        if(num%7==0){
            result=result+"Whizz";
        }
    }else if(num%7==0){
        result="Whizz";
    }
    return result;
}

总测试结果如下:


test result

由代码分析可知,不管是输入8种情况中的任意一种,均需要通过3次判定;
并且,从代码中可以看见有许多重复代码,而这些重复代码执行所需要的判定也是一样的。于是,我尝试将重复的代码进行归并,考虑到当输入为非3,5,7的倍数时,输出与输入相同的数字,还要添加一条判定,如下:

function run(num){
    var result="";
    if(num%3==0){
        result+="Fizz";
    }
    if(num%5==0){
        result+="Buzz";
    }
    if(num%7==0){
        result+="Whizz";
    }
    if(result==="")
        return num.toStirng;
    return result;
}

测试结果:

test result
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,958评论 19 139
  • 需求分析如下: 1.run 的参数为 3、5和7共同的倍数,run 的参数为 5和7共同的倍数...可以转换为nu...
    今站阅读 259评论 4 1
  • FizzBuzzWhizz 需求: when run(3) return 'Fizz'when run(5) re...
    我随便取的名阅读 481评论 1 1
  • 元旦这件事 其实很有趣 跨年这个词 听听都浪漫 零点那一刻班群也在线 外面的世界也是热闹非凡 烟花爆竹 还有新春呐...
    萍萍_sunshine阅读 142评论 0 0
  • 19号,济南史上最严限购令发布 20日,开始实施 谁说政府没效率的? 这速度 反应的时间都不给你 估计厕所里已经哭...
    peter潘英语阅读 280评论 3 2