【问题标题】:It says I need to add "," in C#, Where do I put it? [closed]它说我需要在 C# 中添加“,”,我应该把它放在哪里? [关闭]
【发布时间】:2018-03-11 04:48:38
【问题描述】:

我尝试在 C# 中编写 FizzBu​​zz 代码,但它给我的错误代码是我在某处遗漏了“,”,但我找不到放置它的位置 另外我知道代码中还有其他底层程序我只需要修复它,以便我可以编译和修复它们

using System;

namespace ConsoleApp5
{
    class Program
    {
        static void Main(string[] args)
        {
            float i = 0;
            if (i != 101)
            {
                i = i + 1;
                float i3 = i / 3;
                float i5 = i / 5;
                float i15 = i / 15;
                string Print = Convert.ToString(i)
                else ; if ((i3 %1) > 0)
                {
                   string Hold = ("Fizz");
                    Print = Hold;
                }
                else if ((i3 % 1) > 0)
                {
                    string Hold = ("Buzz");
                    Print = Hold;
                }
                else if ((i15 % 1) > 0)
                {
                    string Hold = ("FizzBuzz");
                    Print = Hold;
                }
                Console.WriteLine(Print)
                ; Console.WriteLine("Done");
                Console.ReadLine();


            }
        }
    }
}

【问题讨论】:

  • 确切的错误信息是什么,它说它发生在哪里?是的,这里有很多问题,我相信你的编译器已经给出了它们,所以你可以从第一个开始,然后继续前进。
  • 你还有更多问题
  • @Agent_Orange 您的代码也有错误,在第一个if 范围内创建的变量在您创建的else 范围内不可见。
  • @john,这是我要指出的语法错误之一
  • 停止评论这篇文章。发帖人应该努力解决问题,至少应该发布具体的错误信息和行位置。在这里继续向 cmets 添加噪音没有任何好处。

标签: c# fizzbuzz


【解决方案1】:

Fizz-Buzz原本是一个教孩子除法的游戏,它的工作原理是这样的:

指定先走的玩家说出数字“1”,每个玩家轮流数一个数字。然而,任何能被三整除的数字都被单词 fizz 代替,任何能被五整除的数字都被单词 Buzz 代替。能被两者整除的数字会变成嗡嗡声。

所以你的程序有很多错误,第一个是你在应该循环的地方使用了if。你的第一个if 声明:

if (i != 101)
{ ... }

真的什么都不做。您在前面的语句中设置了i=0,所以i 永远不会等于101。您需要做的是 while 循环:

float i = 0.0f;
while (i < 101.0f)
{
   //Run the program
}

您遇到的下一个问题是,可以将i 用于迭代器,甚至可以将xy 用于迭代维度,但这确实是单字母变量应该停止的地方。使用有意义的名称,这会让事情变得更容易:

因此,我们需要再次检查 i 是否可以被 3、5 或两者整除。我们可以用简单的布尔变量来做到这一点,不需要让事情变得更复杂。

bool divisibleBy3 = i % 3.0f == 0.0f;
bool divisibleBy5 = i % 5.0f == 0.0f;

你的下一个错误是你在奇怪的地方有;,也就是说你似乎把它们混合在不同的行中。尽量不要这样做。 ; 不应该出现在每个代码行的末尾的原因很少,而且实际上每行应该只有一个。所以这个:

string Print = Convert.ToString(i)
else ; if ((i3 %1) > 0)

这是一个错误,因为它将所有内容视为一行,直到到达;,所以你的代码真的变成了:

string Print = Convert.ToString(i) else;
if (...)

这应该是很明显的问题。

我要谈到的最后一个问题实际上不是代码问题,而是表单问题。你有很多“持有”变量,它们什么都不做,只是暂时把东西放在某个地方,然后把它们放在其他地方,就像这样:

if ((i3 %1) > 0)
{
   string Hold = ("Fizz");
    Print = Hold;
}

Hold 的用途是什么?你可以写:

Print = "Fizz";

() 也是不必要的。因此,让我们学习所有这些课程并将它们放入 Fizz-Buzz 程序中:

int i = 0; //No reason to use float here, int is just fine
while (i <= 100)
{
    bool divisibleBy3 = i % 3 == 0;
    bool divisibleBy5 = i % 5 == 0;

    if (divisibleBy3 && divisibleBy5)
        Console.WriteLine("FizzBuzz");
    else if (divisibleBy3)
        Console.WriteLine("Fizz");
    else if (divisibleBy5)
        Console.WriteLine("Buzz");
    else
        Console.WriteLine(i.ToString());

    i += 1;
}
Console.WriteLine("Done");
Console.ReadKey(true);

或者,可以用for循环编写:

for (int i = 0; i <= 100; i++)
{
    bool divisibleBy3 = i % 3 == 0;
    bool divisibleBy5 = i % 5 == 0;

    if (divisibleBy3 && divisibleBy5)
        Console.WriteLine("FizzBuzz");
    else if (divisibleBy3)
        Console.WriteLine("Fizz");
    else if (divisibleBy5)
        Console.WriteLine("Buzz");
    else
        Console.WriteLine(i.ToString());
}
Console.WriteLine("Done");
Console.ReadKey(true);

因此,您可以了解如何为变量赋予有意义的名称、注意缩进/格式化以及理解 ; 可以帮助您更轻松地进行调试。干净、格式良好的代码易于阅读和调试,并且为变量赋予有意义的名称意味着您无需通读变量的整个用法即可知道其用途。

注意:一些程序员会争辩说 Fizz-Buzz 可以压缩到 1-3 行代码。虽然这是可能的,但我认为它并没有展示出良好的编程实践。可以维护的可读代码与为了简短而缩短代码之间存在很大差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2016-08-25
    相关资源
    最近更新 更多