【问题标题】:While loop, sum the fifth, tenth, fifteenth...etc numberwhile循环,将第五个,第十个,第十五个......等数字相加
【发布时间】:2018-09-26 09:05:37
【问题描述】:

需要做什么的例子:

"输入了几个数字(输入再次以0结尾)。确定并打印第5个的总和, 10号、15号等”

谁能告诉我我的代码有什么问题?

class Program
{
    static void Main(string[] args)
    {
        int counter = 0;
        int sum = 0;

        Console.Write("Enter a number: ");
        int number = int.Parse(Console.ReadLine());

        while (number != 0)
        {
            if (number > 0 && counter % 5 == 0)
            {
                counter++;
                sum = sum + number;
            }
            Console.Write("Enter a number: ");
            number = int.Parse(Console.ReadLine());
        }

        Console.WriteLine("Sum of the 5th, 10th, 15th ... number is = {0}", sum);
        Console.ReadKey();
    }
}

【问题讨论】:

  • 欢迎来到 StackOverflow。这是一个很好的第一个答案。提示:你可以写sum += number; 而不是sum = sum + number; :)
  • 那么,出了什么问题?你得到了什么?你只展示你所期望的,而不是你得到的。
  • 如果您熟悉 LINQ,github.com/morelinq/MoreLINQ#takeevery 可能会感兴趣。

标签: c# while-loop iteration


【解决方案1】:

问题:只有在% 5 == 0 时才增加counter,但它永远不会达到该值。如您所见,您的起始值为:

int counter = 0;

所以 if 条件的第二部分将在第一次迭代和所有后续迭代中计算为 false,因为变量永远没有机会改变。它在所有迭代中都保持在0

解决方案:将递增行放在 if 子句之外。 这样您实际上是在计算输入数字的数量,因此您可以识别它是第 5 个、第 10 个、第 15 个 ...

由于您打算计算输入数字,我建议将

number = int.Parse(Console.ReadLine());

作为 while 循环的第一行。然后你可以数数,然后你应该评估这个数字是否是第 5 个、第 10 个、第 15 个 ... 元素:

while (number != 0)
{
    Console.Write("Enter a number: ");
    number = int.Parse(Console.ReadLine());
    counter++;

    if (number > 0 && counter % 5 == 0)
    {
        sum = sum + number;
    }
}

编辑:灵感来自PaulF 的评论:

我会假设计数器应该只在 (number > 0) 时增加。

要正确详细说明您的要求,您需要制作一个额外的 if 子句来检查这种情况。但是由于0 是加法中的中性元素,因此它不会对计算的总和产生影响。所以代码仍然应该产生预期的结果

编辑2:

如果您的意图也是不允许负数,那么您应该将 if 子句分成两部分,并且仅当输入的数字高于 0 时才增加计数器。之后您可以检查当前元素是否是要添加到总和的候选:

while (number != 0)
{
    Console.Write("Enter a number: ");
    number = int.Parse(Console.ReadLine());

    if (number > 0 )
    {
        counter++;
        if (counter % 5 == 0)
        {
            sum = sum + number;
        }
    }
    else
    {
        Console.Write("Please no negative numbers!");
    }
}

【讨论】:

  • 获取数字也应该在while循环中
  • @AshkanMobayenKhiabani 它在 while 循环中
  • @MongZhu:从原始代码中,我假设计数器只应在 (number > 0) 时递增。
  • @PaulF 听起来是正确的,但由于 0 是加法中的中性元素,它不会对计算的总和产生影响。但你的评论是有效的。我会将其纳入我的答案中
  • @MongZhu:输入任何负数都是有效输入,但与原始代码相比会影响结果。我会将 if 子句一分为二 - 每五个数字的检查嵌套在正检查中。
【解决方案2】:

你必须在 if 语句之前增加计数器

Counter++
If (counter % 5 == 0) { 
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多