C#程序:数组存考试分数求最值及平均值,最低分错误显示0求助
解决最低分始终显示0的问题
嗨,我来帮你排查这个最低分一直显示0的问题~ 这个bug的根源大概率是你初始化最低分变量的方式不对,我来给你拆解清楚:
常见错误原因
很多新手会把最低分(比如minScore)初始设为0,但如果你的输入分数都是正数(比如考试分数通常是0-100,甚至都是及格分),那score < minScore这个判断条件永远不会触发,minScore就会一直停留在初始值0,哪怕你根本没输入过0分。
举个例子,结合你给出的代码片段,推测你的代码大概是这样的:
static void Main(string[] args) { List<int> scores = new List<int>(); int input; int maxScore = 0; int minScore = 0; // 这里就是问题所在! double average = 0; // 循环收集分数 while (true) { Console.WriteLine("请输入考试分数(输入-99终止):"); input = int.Parse(Console.ReadLine()); if (input == -99) break; scores.Add(input); } // 计算高低分 foreach (int score in scores) { if (score > maxScore) maxScore = score; if (score < minScore) minScore = score; // 所有分数都>0的话,这个条件永远不成立 } average = scores.Average(); Console.WriteLine($"最高分:{maxScore},最低分:{minScore},平均分:{average:F2}"); }
修正方案
我们需要用第一个有效输入的分数来初始化最高分和最低分,而不是固定设为0,这样就能保证高低分的判断是基于实际输入的分数。这里有两种常用的修正方式:
方式1:收集完所有分数后初始化高低分
适合分数不多的场景,逻辑清晰:
static void Main(string[] args) { List<int> scores = new List<int>(); int input; int maxScore; int minScore; double average = 0; // 收集分数 while (true) { Console.WriteLine("请输入考试分数(输入-99终止):"); // 额外建议:这里可以加个输入合法性判断,避免非数字输入报错 if (!int.TryParse(Console.ReadLine(), out input)) { Console.WriteLine("请输入有效的数字!"); continue; } if (input == -99) break; scores.Add(input); } // 先判断是否有有效分数 if (scores.Count == 0) { Console.WriteLine("没有输入任何有效分数!"); return; } // 用第一个分数初始化高低分 maxScore = scores[0]; minScore = scores[0]; // 遍历更新高低分 foreach (int score in scores) { if (score > maxScore) maxScore = score; if (score < minScore) minScore = score; } average = scores.Average(); Console.WriteLine($"最高分:{maxScore},最低分:{minScore},平均分:{average:F2}"); }
方式2:输入过程中实时更新高低分
更高效,不用额外遍历一次数组:
static void Main(string[] args) { List<int> scores = new List<int>(); int input; int maxScore; int minScore; double average = 0; // 处理第一个输入 Console.WriteLine("请输入考试分数(输入-99终止):"); if (!int.TryParse(Console.ReadLine(), out input)) { Console.WriteLine("请输入有效的数字!"); return; } if (input == -99) { Console.WriteLine("没有输入任何有效分数!"); return; } scores.Add(input); maxScore = input; minScore = input; // 继续收集后续分数并实时更新高低分 while (true) { Console.WriteLine("请输入考试分数(输入-99终止):"); if (!int.TryParse(Console.ReadLine(), out input)) { Console.WriteLine("请输入有效的数字!"); continue; } if (input == -99) break; scores.Add(input); if (input > maxScore) maxScore = input; if (input < minScore) minScore = input; } average = scores.Average(); Console.WriteLine($"最高分:{maxScore},最低分:{minScore},平均分:{average:F2}"); }
额外小提示
别忘了处理用户输入非数字的情况(上面的代码用了int.TryParse来避免程序崩溃),还有一开始就输入-99的空输入场景,这样你的程序会更健壮哦~
内容的提问来源于stack exchange,提问作者user9374267
相关产品推荐
相关产品推荐

