0

我正在尝试从这里开始的 fizzbuzz 程序:Why Can't Programmers.. Program?

“编写一个程序,打印从 1 到 100 的数字。但是对于三的倍数打印“Fizz”而不是数字,对于五的倍数打印“Buzz”。对于同时是三和五的倍数的数字,打印“FizzBu​​zz” “。”

protected void btn1_Click(object sender, EventArgs e)
    {
        for (int i = 1; i < 101; i++)
        {
            if (i % 3 == 0 & i % 5 == 0)
            {
                Response.Write("fizzbuzz" + ",");
            }
            else if (i % 3 == 0)
            {
                Response.Write("fizz" + ",");
            }
            else if (i % 5 == 0)
            {
                Response.Write("buzz" + ",");
            }
            else
            {
                i = i + 0;
            }

            Response.Write(i +",");
        }

    }

我能够产生某种结果,例如:

1,2,fizz,3,4,buzz,5,fizz,6,7,8,fizz,9,buzz,10,11,fizz,12,13,14,fizzbuzz,15,16,17,fizz, 18,19,buzz,20,fizz,21,22,23,fizz,24,buzz,25,26,fizz,27,28,29,fizzbuzz,30,31,32,fizz,33,34,buzz, 35,fizz,36,37,38,fizz,39, 等等..

打印了fizz这个词,但它没有取代 3,打印了fizzbuzz但它没有取代 15,所以......

4

7 回答 7

7

无论您是否满足 if 条件,您仍然i会在代码末尾打印。

具体看看你的 for 循环:

for (int i = 1; i < 101; i++)         
{             
if (i % 3 == 0 & i % 5 == 0)             
{                 
Response.Write("fizzbuzz" + ",");             
}             
else if (i % 3 == 0)             
{                 
Response.Write("fizz" + ",");             
}             
else if (i % 5 == 0)             
{                 
Response.Write("buzz" + ",");             
}             
else             
{                 
i = i + 0;             
}              
Response.Write(i +",");   //look here you print i
} 

所以你需要移动最后一个 Response.Write(i + ","); 在最后一个else条件。查找此类错误的最简单方法是使用调试器并调试您的程序。然后,您将很容易看到输出是什么。所以一定要使用调试器并设置断点/监视并观察会发生什么。您的代码应更改为:

  for (int i = 1; i < 101; i++)         
    {             
    if (i % 3 == 0 & i % 5 == 0)             
    {                 
    Response.Write("fizzbuzz" + ",");             
    }             
    else if (i % 3 == 0)             
    {                 
    Response.Write("fizz" + ",");             
    }             
    else if (i % 5 == 0)             
    {                 
    Response.Write("buzz" + ",");             
    }             
    else             
    {                 
    Response.Write(i +",");   //look here you print i
    }              
    } 

i=i+1请注意,删除for循环已经通过增加 i 来处理这个问题。

编辑

不确定这是否更容易,但这是使用 lambda 的另一种方法:

            List<int> t;
            t = Enumerable.Range(1, 100).ToList();

            var fizzBuzz = t.Where(num => num % 3 == 0 && num % 5 == 0);
            var fizz = t.Where(num => num % 3 == 0);
            var buzz = t.Where(num => num % 5 == 0);
            var notFizzBuzz = t.Where(num => num % 3 != 0 && num % 5 !=0);

            //print fizzBuzz elements
            Console.WriteLine("Printing fizzBuzz elements...");
            foreach (int i in fizzBuzz)
                Console.WriteLine(i);

            //print fizz elements
            Console.WriteLine("Printing fizz elements...");
            foreach (int i in fizz)
                Console.WriteLine(i);

            //print buzz elements
            Console.WriteLine("Printing buzz elements...");
            foreach (int i in buzz)
                Console.WriteLine(i);

            //print other elements
            Console.WriteLine("Printing all others...");
            foreach (int i in notFizzBuzz)
                Console.WriteLine(i);
于 2011-04-13T12:29:19.000 回答
1

试试这些改变

protected void btn1_Click(object sender, EventArgs e)
{
    for (int i = 1; i < 101; i++)
    {
        if (i % 3 == 0 & i % 5 == 0)
        {
            Response.Write("fizzbuzz" + ",");
        }
        else if (i % 3 == 0)
        {
            Response.Write("fizz" + ",");
        }
        else if (i % 5 == 0)
        {
            Response.Write("buzz" + ",");
        }
        else
        {
            Response.Write(i +",");
        }           
    }
}

i = i + 0显然什么都不做,因为你在 i 的值上加了 0。

无论 if/else 块的结果如何(它放在它之后),您都将数字打印到响应中,因此应该将它移到 else 中(意味着仅在 if 或 else if 不匹配时打印。

于 2011-04-13T12:29:45.770 回答
0

进入Response.Write(i +",");你的决赛

于 2011-04-13T12:30:08.620 回答
0
protected void btn1_Click(object sender, EventArgs e)
{
    for (int i = 1; i < 101; i++)
    {
        if (i % 3 == 0 & i % 5 == 0)
        {
            Response.Write("fizzbuzz" + ",");
        }
        else if (i % 3 == 0)
        {
            Response.Write("fizz" + ",");
        }
        else if (i % 5 == 0)
        {
            Response.Write("buzz" + ",");
        }
        else
        {
            i = i + 0; //this is totally useless
            Response.Write(i + ",");

        }

        //Response.Write(i +","); //This will always write the number, even if you wrote fizz or buzz
    }

}
于 2011-04-13T12:30:56.263 回答
0

它的另一个简单实现:

for (int i = 1; i <= 100; i++)
        {
            Console.WriteLine((i % 3 == 0) ? ((i % 5 == 0) ? "FizzBuzz" : "Fizz") : ((i % 5 == 0) ? "Buzz" : i.ToString()));
        }
Console.ReadKey();
于 2017-09-11T15:17:21.957 回答
0
    public static void PrintMod3And5FromInterval(int start, int end)
    {
        if (end < start)
        {
            Console.WriteLine("End number should be higher than start.");
        }
        else
        { 
            string result = "";
            for (int x = start; x <= end; x++)
            {
                if (x % 3 == 0)
                    result += "fizz";
                if (x % 5 == 0)
                    result += "buzz";
                if (result == "")
                    Console.WriteLine(x);
                else
                    Console.WriteLine(result);
                result = "";
            }
        }
    }
    static void Main(string[] args)
    {
        PrintMod3And5FromInterval(1, 100);
        Console.Read();
    }
于 2017-11-21T14:32:37.680 回答
0

这是我原来的解决方案...

for (let number = 1; number <= 100; number ++) {
if (number % 3 === 0 && number % 5 === 0) {
    console.log(number + "fizzbuzz");
} else if (number % 5 === 0) {
console.log(number + "buzz");
} else if (number % 3 === 0)
console.log(number + "fizz");
else  {
console.log(number);
}
}     

但是这个要短很多...

for (let n = 1; n <= 100; n++) {
  let output = "";
    if (n % 3 == 0) output += "Fizz";
    if (n % 5 == 0) output += "Buzz";
  console.log(output || n);
}
于 2018-07-17T01:41:30.250 回答