在循环时,将第五个,第十个,第十五个...等数字相加

时间:2018-09-26 09:05:37

标签: c# while-loop iteration

需要做什么的示例:

Example of what needs to be done

“输入了几个数字(输入再次以0结尾。)确定并打印第5个数字的和, 第十,十五号,等等。

有人可以告诉我我的代码有什么问题吗?

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

2 个答案:

答案 0 :(得分:8)

问题:仅当counter时,您才递增% 5 == 0,但它从未达到该值。如您所见,起始值为:

int counter = 0;

因此,if条件的第二部分将在第一次迭代和所有后续迭代中求值为false,因为变量永远不会获得更改的机会。在所有迭代中,它始终为0

解决方案:将递增线放在if子句之外。 这样,您实际上就在计算输入数字的数量,从而可以确定它是第5,第10,第15还是第...... p

由于您打算计算输入数字,因此建议您输入

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

答案 1 :(得分:0)

如果要发表声明,则必须先增加计数器

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