C#成绩转换程序求最低分函数返回0无编译报错问题咨询
问题原因
getMinimumGrade函数存在初始化逻辑错误:
- 最小值初始值被硬编码为
0,常规成绩取值均大于等于0,遍历过程中没有任何成绩能满足grade < min的判断条件,所以函数永远返回初始值0。 - 额外注意:求最高分的函数也存在隐藏bug,只是测试场景为正分所以未触发,如果所有成绩为负数(比如存在扣分场景),最高分函数也会永远返回0。
修复方案
方案1:修改初始值为列表首元素(兼容手写逻辑需求)
先判断列表非空避免索引异常,再将初始值设为列表第一个元素,修改后的代码如下:
static float getMinimumGrade(List<float> listOfNumberGrades){ // 空列表返回值可根据业务需求调整 if(listOfNumberGrades == null || listOfNumberGrades.Count == 0) return 0; float min = listOfNumberGrades[0]; foreach(float grade in listOfNumberGrades){ if( grade < min){ min = grade; } } return min; }
同时建议同步修改最高分函数,消除隐藏bug:
static float getMaximumGrade(List<float> listOfNumGrades){ if(listOfNumGrades == null || listOfNumGrades.Count == 0) return 0; float max = listOfNumGrades[0]; foreach(float grade in listOfNumGrades){ if( grade > max){ max = grade; } } return max; }
方案2:调用C#内置方法(更简洁稳定)
C#的System.Linq命名空间已经封装好了集合的最值、平均值计算逻辑,直接调用即可省去手写遍历的出错概率:
- 代码顶部引入命名空间:
using System.Linq;
- 直接调用内置方法获取对应值:
float minimumGrade = scores.Min(); float maximumGrade = scores.Max(); float averageScore = scores.Average();
内容的提问来源于stack exchange,提问作者Ty_Olz
相关产品推荐
相关产品推荐

