c# - 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();
}
}
解决方案
问题:你增加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!");
}
}
推荐阅读
- html - xPath:在具有特定文本的 h4 之后选择 div
- ruby-on-rails - 只需在 Rails 6 的 erb 文件中使用我自己的自定义 javascript
- python - python多处理。使用池或进程
- amazon-web-services - 我可以使用 AWS Lambda 函数从第三方 MySql 数据库中获取数据吗?
- typescript - 未捕获的引用错误:app.js 中未定义导出
- maven - 为什么 Tomcat Maven 插件无法重新部署并出现错误 404?
- data-science - 如果我只关心特征重要性,我应该在测试和训练之间拆分数据吗?
- c# - C# 项目需要 .NET 4.7.1 但我无法安装它
- ios - 从本地文件反应原生视频
- colors - 有没有一种将 RGB 三元组分类为颜色组的快速方法?