[英]C# calculating an average adds an extra number
我是 C# 的新程序员,在这个网站上是新的,找不到关于这个主题的类似帖子,如果它已经被覆盖,很抱歉。
作为视频课程的一部分,我被指示创建一个控制台“APP”来计算学生的平均分数。 用户输入学生总数,然后输入每个人的分数,然后将总和除以学生人数。 我不明白的是为什么 C# 为学生增加了另一个额外的数字? 所以用户输入5,我得到6次得分......
class Program
{
static void Main(string[] args)
{
int totalScores= 0;
int totalStudents = 0;
int number;
Console.WriteLine("how many students are there?");
int studentNumber = int.Parse(Console.ReadLine());
while(totalStudents <= studentNumber)
{
Console.WriteLine("enter your student score");
string studentScore = Console.ReadLine();
if (int.TryParse(studentScore, out number))
{
totalScores += number;
totalStudents += 1;
}
else
{
Console.WriteLine("you did not enter a number");
}
}
int avarage = totalScores / totalStudents;
Console.WriteLine("the average is" + average);
}
}
这是我在控制台中看到的:控制台
我确定我错过了什么……有什么建议吗?
迭代器变量“ totalStudents ”从 0 开始,因此您的 while 循环条件应仅更改为“<”,同时使用“ studentNumber ”变量来计算平均值。
while(totalStudents < studentNumber)
{
Console.WriteLine("enter your student score");
string studentScore = Console.ReadLine();
if (int.TryParse(studentScore, out number))
{
totalScores += number;
totalStudents += 1;
}
else
{
Console.WriteLine("you did not enter a number");
}
}
int avarage = totalScores / studentNumber;
简短的回答是您应该使用while(totalStudents < studentNumber)
。 但让我们探讨一下原因。
我希望你专注于这个时间点:
while(totalStudents <= studentNumber)
{
// <------ HERE
Console.WriteLine("enter your student score");
string studentScore = Console.ReadLine();
// rest of code omitted
}
换句话说,这是在您决定注册另一个学生之后,但在您注册该学生之前。
假设总共有 3 名学生,请告诉我每个循环中totalStudents
的值是多少。 请在继续之前尝试解决它,这是作为初学者理解的基本技能。
第一个循环:
totalStudents = 0
第二个循环:totalStudents = 1
第三个循环:totalStudents = 2
第四个循环:totalStudents = 3
总结:当开始循环 X 时,totalStudents
等于 X-1
注意:我在列表中添加了第四个循环,因为您当前的代码额外运行了一个循环,我想向您展示导致第四个循环的原因。
现在让我们重复这个练习,但关注另一个时间点:
while(totalStudents <= studentNumber)
{
Console.WriteLine("enter your student score");
string studentScore = Console.ReadLine();
// if block omitted
// <------ HERE
}
换句话说,这是在您决定注册另一个学生之后,并且在您注册该学生之后。 对于每个循环(假设 3 个学生),告诉我totalStudents
的值。
第一个循环:
totalStudents = 1
第二个循环:totalStudents = 2
第三个循环:totalStudents = 3
第四个循环:totalStudents = 4
总结:当完成循环 X 时,totalStudents
等于 X
在第三个循环结束时, while
将检查是否需要启动另一个循环。 要检查这一点,它会检查是否totalStudents <= studentNumber
。
在我的示例中,我们确定studentNumber
为 3。但是在第三个循环执行后, totalStudents
的值是多少? (提示:查看我列出的上述值)。
由于您现在知道totalStudents
和studentNumber
的值,因此您可以看到totalStudents <= studentNumber
将评估为true
,因此将启动第四个循环。
但你不想要这个。 您希望它在studentNumber
循环数之后停止。
另一种说法是,仅当您当前注册的学生数量少于您希望注册的学生总数时,才应启动另一个循环。 当它们相等时,您不想开始另一个循环。
因此,正确的while
评估应该使用小于运算符: totalStudents < studentNumber
。
作为一个很好的提示,请尝试为变量使用更好的描述性名称。 我建议以下重命名:
totalStudents
=> amount_of_students_you_have_entered_so_far
studentNumber
=> amount_of_students_you_will_enter_in_total
这些名字很长,但我让它们非常具有描述性且易于理解,因为您是初学者。 现在让我们再次使用新名称重新访问您的代码(包含错误):
while(amount_of_students_you_have_entered_so_far <= amount_of_students_you_will_enter_in_total)
{
// rest of code omitted
}
现在更清楚地看到您的评估存在缺陷。
我承认这些名字太长了。 但是,如果您难以解析代码的含义,最好是过度描述,而不是让它更难猜测。 经验会随着时间的推移而出现,然后您可以减少变量名称的长度。
就我个人而言,我会使用studentCounter
和studentTotal
来表示一个是向上计数的值,另一个是这个计数值应该达到的最大限制。
我怀疑您无法发现该错误的部分原因是因为您使用“总数”一词来指代输入的学生人数( totalStudents
),而您使用“数字”来指代您的学生总数将输入 ( studentNumber
)。 你换了个词。
也许是因为在 while 循环中你放了小于或等于 5,所以它会在学生总数中增加 1 直到达到 5,并且它会在第五个中增加 1,使其成为 6。就是这样,如果你只是改变它应该可以正常工作<= 只是 <
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.