在C#中使用"while“循环求解”冒泡蜂鸣“时,我发现首先应该找到3和5的倍数(15的倍数),然后找到3和5的倍数,如下所示。
int myval = 0;
while (myval < 100)
{
myval = myval + 1;
if (myval % 15 == 0)
{
listBox1.Items.Add("fizzbuzz");
}
else if (myval % 3 == 0)
{
listBox1.Items.Add("fizz");
}
else if (myval % 5 == 0)
{
listBox1.Items.Add("buzz");
}
else
{
listBox1.Items.Add(myval);
}
}但是如果我先写代码过滤3和5的倍数,然后像下面这样同时过滤3和5的倍数(15的倍数),那么最终结果只显示了冒泡(3的倍数)和嗡嗡(5的倍数),而没有冒泡-嗡嗡(3和5的倍数)。有人知道这是什么原因吗?即使IDE没有显示任何错误。
myval = 0;
while (myval < 100)
{
myval = myval + 1;
if (myval % 3 == 0)
{
listBox1.Items.Add("fizz");
}
else if (myval % 5 == 0)
{
listBox1.Items.Add("buzz");
}
else if (myval % 15 == 0)
{
listBox1.Items.Add("fizzbuzz"); // for multiples of both 3 and 5
}
else
{
listBox1.Items.Add(myval);
}
}

发布于 2013-05-17 22:34:27
归根结底,if-else语句是按顺序处理的。一旦遇到计算结果为true的条件,就会跳过其他else if子句。
假设a和b都是true。当你写的时候
if (a) {
Foo1();
}
else if (b) {
Foo2();
}您不能同时执行Foo1和Foo2。由于a为true,因此将执行Foo1,甚至不计算b。
现在考虑一下你的问题。考虑数字15,所有3个候选因子,3,5和15,都除以这个数字。
if (myval % 3 == 0)
{
listBox1.Items.Add("fizz");
}
else if (myval % 5 == 0)
{
listBox1.Items.Add("buzz");
}
else if (myval % 15 == 0)
{
listBox1.Items.Add("fizzbuzz"); // for multiples of both 3 and 5
}
else
{
listBox1.Items.Add(myval);
}由于15的倍数也是3 (和5)的倍数,因此您将永远不会达到15的倍数的myval % 15 == 0测试。
发布于 2013-05-17 22:35:17
因为它满足前两个条件。所以它永远不会命中你的第三个else语句。
发布于 2013-05-17 22:35:39
这是因为可以被3和5整除的东西也可以被3和5整除。如果你首先捕获了这两个条件中的任何一个,那么后面的条件永远不会被检查。
你也可以这样写它:
var resultString = "";
if(myval % 3 == 0) resultString += "fizz";
if(myval % 5 == 0) resultString += "buzz";
if(myval % 5 != 0 && myval % 3 != 0) resultString += myval;
listBox1.Items.Add(resultString);这将打印所有条件,而不需要单独检查% 15。
此外,我知道这不是最初的问题,但通常有人不会使用while循环来遍历一系列数字。为此,请使用for循环:
for( int myval = 0; myval <= 100; myval++)
{
// code goes here
}https://stackoverflow.com/questions/16611626
复制相似问题