首页 > 解决方案 > while循环,将第五个,第十个,第十五个......等数字相加

问题描述

需要做什么的例子:

需要做什么的例子

“输入了几个数字(输入再次以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();
    }
}

标签: c#while-loopiteration

解决方案


问题:你增加counter唯一的 if% 5 == 0但它永远不会达到那个值。如您所见,您的起始值为:

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评论的启发:

我会假设计数器应该只在(数字> 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!");
    }
}

推荐阅读