写 FizzBu​​zz

2024-01-02

读完这本编码恐怖小说后,我再次遇到了 FizzBu​​zz。

原帖在这里:编码恐怖:为什么程序员不能编程? http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html

对于那些不知道的人: FizzBu​​zz 是一款非常流行的儿童游戏。从1数到100, 每当一个数字能被 3 整除时,就会调用字符串“Fizz”,每次 一个数字可以被 5 整除,则调用字符串“Buzz”,并且每次数字 能被 3 和 5 整除,两个字符串一起被称为“FizzBu​​zz”而不是数字。

这次,我写代码花了我一分钟, 但有几件事我不喜欢。

这是我的代码:

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);
    }
}

所以我的问题是:

  1. 我如何摆脱找到的布尔值?
  2. 有没有更好的测试方法 比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(使用前将#替换为@)

写 FizzBu​​zz 的相关文章

随机推荐