读完这本编码恐怖小说后,我再次遇到了 FizzBuzz。
原帖在这里:编码恐怖:为什么程序员不能编程? http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html
对于那些不知道的人:
FizzBuzz 是一款非常流行的儿童游戏。从1数到100,
每当一个数字能被 3 整除时,就会调用字符串“Fizz”,每次
一个数字可以被 5 整除,则调用字符串“Buzz”,并且每次数字
能被 3 和 5 整除,两个字符串一起被称为“FizzBuzz”而不是数字。
这次,我写代码花了我一分钟,
但有几件事我不喜欢。
这是我的代码:
public void DoFizzBuzz()
{
var combinations = new Tuple<int, string>[]
{
new Tuple<int, string> (3, "Fizz"),
new Tuple<int, string> (5, "Buzz"),
};
for (int i = 1; i <= 100; ++i)
{
bool found = false;
foreach (var comb in combinations)
{
if (i % comb.Item1 == 0)
{
found = true;
Console.Write(comb.Item2);
}
}
if (!found)
{
Console.Write(i);
}
Console.Write(Environment.NewLine);
}
}
所以我的问题是:
- 我如何摆脱找到的布尔值?
- 有没有更好的测试方法
比foreach?
我认为你的实现不必要地复杂。这个可以完成这项工作并且更容易理解:
public void DoFizzBuzz()
{
for (int i = 1; i <= 100; i++)
{
bool fizz = i % 3 == 0;
bool buzz = i % 5 == 0;
if (fizz && buzz)
Console.WriteLine ("FizzBuzz");
else if (fizz)
Console.WriteLine ("Fizz");
else if (buzz)
Console.WriteLine ("Buzz");
else
Console.WriteLine (i);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)