当使用“而”循环在C#中解决“嘶嘶声,嗡嗡声”,我发现,我首先应该找到既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);
}
}
这归结到这一事实if-else
语句顺序处理。 只要计算结果为条件true
遇到,其他else if
条款被跳过。
假设a
和b
都是true
。 当你写
if (a) {
Foo1();
}
else if (b) {
Foo2();
}
你不执行这两个Foo1
和Foo2
。 因为a
是true
, Foo1
执行和b
甚至没有评估。
现在考虑您的问题。 考虑15号的所有三个候选除数,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
),你甚至不会达到myval % 15 == 0
测试的倍数15
。
因为它满足了前两个条件。 所以,它永远不会打你的第三个else语句。
这是因为一些由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
}
我总是解决了这个稍微不同的方式:通过构建字符串添加。
for (int myVal = 0; myVal < 100; myVal++)
{
string fb = "";
if ((myVal % 3) == 0) { fb = "fizz"; }
if ((myVal % 5) == 0) { fb += "buzz"; }
// Handle the case where it isn't divisible by 3 or 5:
if (fb == "") { fb = myVal.ToString(); }
// "output" the string.
listBox1.Items.Add(fb);
}
您可以使用此方法来填补你的Listbox
:
foreach (int i in Enumerable.Range(1,100)){
string str = null;
listBox1.Items.Add((str = (i % 3 == 0 ? "fizz" : "")
+ (i % 5 == 0 ? "buzz" : "")) == ""
? i.ToString() : str );
}