Fizz-Buzz-Whizz
Fizz-Buzz-Whizz
ThoughtWorks测试
问题描述:
1. 你首先说出三个不同的特殊数,要求必须是个位数,比如3、5、7。
2. 让所有学生拍成一队,然后按顺序报数。
3. 学生报数时,如果所报数字是第一个特殊数(3)的倍数,那么不能说该数字,而要说Fizz;如果所报数字是第二个特殊数(5)的倍数,那么要说Buzz;如果所报数字是第三个特殊数(7)的倍数,那么要说Whizz。
4. 学生报数时,如果所报数字同时是两个特殊数的倍数情况下,也要特殊处理,比如第一个特殊数和第二个特殊数的倍数,那么不能说该数字,而是要说FizzBuzz, 以此类推。如果同时是三个特殊数的倍数,那么要说FizzBuzzWhizz。
5. 学生报数时,如果所报数字包含了第一个特殊数,那么也不能说该数字,而是要说相应的单词,比如本例中第一个特殊数是3,那么要报13的同学应该说Fizz。如果数字中包含了第一个特殊数,那么忽略规则3和规则4,比如要报35的同学只报Fizz,不报BuzzWhizz。
说明:以下为模仿Bob大叔的风格进行测试驱动的练习
我先考虑非特殊数字,要输出数字本身,那么我测试1,和2

写这个测试用例的时候,注意到了"特殊数"的概念,而且是三个,那就先建立这个概念吧

让编译器不再抱怨,然后需要可以开始报数了,我需要一个类,暂缺就叫FBW吧,报数呢,那就叫Shout吧

我希望Shout的结果是"1",编译器在抱怨,找不到FBW,那就先解决编译器的抱怨吧,定义下面一个类

编译,运行,通过!很有成就感阿。。。
同样,下面的测试也顺利通过

下面的测试3,按照规则3和规则5都满足,而且都可以终结掉,但是考虑规则5的规则很强硬,只要包含有3,就必须说"Fizz",所以就用下面的用例来测试3

目前编译器会抱怨,需要修改FBW类才能让测试顺利通过,这里我定义Rule5,这个规则用来告诉我两件事:1,返回什么字符串,2,是否可以被这个规则所终结,也就是说这个规则如果能处理完毕,就不需要后续处理,直接返回该字符串就行,所以引入了一个新的类,用来描述规则的处理结果:

同时为FBW添加Rul5方法:

编译,运行,通过,解决了数字3的测试,那么我要测试下面几个

恩,运行通过,说明规则5目前看起来问题不大,碰到问题的时候再说吧。
现在开始处理剩余的规则,简单分析后发现,规则3和规则4其实是一致的规则,规则4包含了规则3,所以合并一起处理吧,这个规则首先解决下面的测试:

也就是说105号应该报"FizzBuzzWhizz",简单看下规则的实现,在FBW类添加如下方法:

编译,运行,通过。。。。。。,感觉真好!
再进行几个测试,心里有底一些

同时别忘记一些边界上的数,测试看看

运行,测试通过,感觉大功告成!
这个代码满足了现在,而我也只关心现在,但是,为了练习技能,我要在后续版本中考虑各种需求变化过程下,如何进行重构!
Fizz-Buzz-Whizz的更多相关文章
- [LeetCode] Fizz Buzz 嘶嘶嗡嗡
Write a program that outputs the string representation of numbers from 1 to n. But for multiples of ...
- Lintcode 9.Fizz Buzz 问题
------------------------ AC代码: class Solution { /** * param n: As description. * return: A list of s ...
- LeetCode 412. Fizz Buzz
Problem: Write a program that outputs the string representation of numbers from 1 to n. But for mult ...
- LeetCode Fizz Buzz
原题链接在这里:https://leetcode.com/problems/fizz-buzz/ 题目: Write a program that outputs the string represe ...
- Fizz Buzz
class Solution { public: /** * param n: As description. * return: A list of strings. */ vector<st ...
- LintCode (9)Fizz Buzz
下面是AC代码,C++风格: class Solution { public: vector<string> fizzBuzz(int N) { vector<string> ...
- [重构到模式-Chain of Responsibility Pattern]把Fizz Buzz招式重构到责任链模式
写一段程序从1打印到100,但是遇到3的倍数时打印Fizz,遇到5的倍数时打印Buzz,遇到即是3的倍数同时也是5的倍数时打印FizzBuzz.例如: 1 2 Fizz 4 Buzz Fizz 7 8 ...
- Swift完成fizz buzz test
看到一篇文章上说,很多貌似看过很多本编程书的童鞋连简单的fizz buzz测试都完不成. 不知道fizz buzz test为何物的,建议自行搜之. 测试要求是,编写满足以下条件的代码: Write ...
- [Swift]LeetCode412. Fizz Buzz
Write a program that outputs the string representation of numbers from 1 to n. But for multiples of ...
- Fizz Buzz 面试题
在CSDN上看到一篇文章<软件工程师如何笑着活下去>,本来是想看对这个行业的一些评价和信息,不曾检索到关于Fizz Buzz的面试题,上网搜了一下,顿感兴趣.留下此文,以表回忆. java ...
随机推荐
- ThreadPoolExecutor的应用和实现分析(中)—— 任务处理相关源码分析 线程利用(转)
前面一篇文章从Executors中的工厂方法入手,已经对ThreadPoolExecutor的构造和使用做了一些整理.而这篇文章,我们将接着前面的介绍,从源码实现上对ThreadPoolExecuto ...
- C++用于修饰的keyword
1.const修饰指针 (1)const int *p=&x:不可改动*p的内容,但能够让指针p指向还有一个地址,和int const *p一样 (2)int *const p=&x: ...
- Android 性能优化 五 性能分析工具dumpsys的使用
Android提供的dumpsys工具能够用于查看感兴趣的系统服务信息与状态,手机连接电脑后能够直接命令行运行adb shell dumpsys 查看全部支持的Service可是这样输出的太多,能够通 ...
- == 和 equal
==比较是地址 equal比较的是值 Integer r1 = new Integer(900);//定义r1整型对象 Integer r2 = new Integer(900);//定义r2整型对象 ...
- Java容器的概要
[Java流输入/输出原理] 在Jaav程序.对于输入数据/输出操作"流"(stream)时尚:J2SDK它提供了多种 各种各样的"流"类,用于获得不同类型的数 ...
- struts2 Session拦截器
一:struts2简介 二:拦截器
- vs2015 安装问题汇总
1. The product version that you are trying to set up is earlier than the version already installed o ...
- Coco2dx-3.0中怎样调用LUA
一个用3.0的工具导出类到lua,自己主动生成代码的方法. 曾经要导出c++类到lua.就得手动维护pkg文件,那简直就是噩梦.3.0以后就会感觉生活非常轻松了. 以下我就在说下详细做法. 1.安装必 ...
- .NET API for RabbitMQ and ActiveMQ
EasyNetQ: .NET API for RabbitMQ: https://github.com/mikehadlow/EasyNetQ/wiki/Quick-Start Or: http:// ...
- Xamarin.Android 入门实例(3)之呼叫电话号码
1.Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...