需要做的事情的例子:
“输入了几个数字(输入再次以 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();
}
}
最佳答案
问题:仅当 % 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 的评论:
I would assume that the counter should only be incremented if (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!");
}
}
关于c# - While 循环,对第五个、第十个、第十五个……等数求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52513911/