理解C#中的嘶嘶声蜂鸣[关闭](understanding the fizz buzz in C#

2019-09-04 02:12发布

当使用“而”循环在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);
    }
}

Answer 1:

这归结到这一事实if-else语句顺序处理。 只要计算结果为条件true遇到,其他else if条款被跳过。

假设ab都是true 。 当你写

if (a) {
    Foo1();
}
else if (b) {
    Foo2();
}

你不执行这两个Foo1Foo2 。 因为atrueFoo1执行和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



Answer 2:

因为它满足了前两个条件。 所以,它永远不会打你的第三个else语句。



Answer 3:

这是因为一些由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
}


Answer 4:

我总是解决了这个稍微不同的方式:通过构建字符串添加。

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


Answer 5:

您可以使用此方法来填补你的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 );
    }


文章来源: understanding the fizz buzz in C# [closed]