gpt4 book ai didi

c# - Fizz buzz 程序奇怪的输出?

转载 作者:太空宇宙 更新时间:2023-11-03 18:31:51 26 4
gpt4 key购买 nike

为什么这会导致 1 2 Fizz 3 ?它不应该导致 1 2 Fizz 吗?!我对这个循环的输出有点困惑..?添加 else if 可以解决这个问题,我的问题是为什么?

for (int i = 1; i <= value; i++)
{
if (i % 3 == 0)
{
ViewBag.Output += "Fizz ";
}
if (i % 5 == 0)
{
ViewBag.Output += "Buzz ";
}
else
{
ViewBag.Output += i.ToString() + " ";
}
}

最佳答案

如果第一个 if 匹配,您不会跳过迭代。因此,当当前 i 未被 5 除时,您有 else 部分 i % 5 if block 评估:

    for (int i = 1; i <= value; i++)
{
if (i % 3 == 0)
ViewBag.Output += "Fizz ";

if (i % 5 == 0)
ViewBag.Output += "Buzz ";

if ((i % 3 != 0) && (i % 5 != 0))
ViewBag.Output += i.ToString() + " ";
}

使用您现在拥有的通用 else block 的替代解决方案:

    for (int i = 1; i <= value; i++)
{
if (i % 3 == 0)
{
ViewBag.Output += "Fizz ";

if (i % 5 == 0)
ViewBag.Output += "Buzz ";
}
else if (i % 5 == 0)
{
ViewBag.Output += "Buzz "
}
else // neither divided by 3 nor by 5
{
ViewBag.Output += i.ToString() + " ";
}
}

还有一个使用字典的解决方案,以避免所有这些额外的 if...else 检查:

var valuesToCheck = new Dictionary<int, string> {
{ 3, "Fizz" },
{ 5, "Buzz" }
};

for (int i = 1; i <= value; i++)
{
bool divisorFound = false;

foreach(var kvp in valuesToCheck)
{
if (i % kvp.Key == 0)
{
divisorFound = true;
ViewBag.Output += kvp.Value + " ";
}
}

if (!divisorFound)
ViewBag.Output += i + " ";
}

关于c# - Fizz buzz 程序奇怪的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21089822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com