如何计算Student对象中多门课程的总学分?
问题解决:课程学分累加失败的修复
问题根源
你的代码里,CourseCredits变量在内部循环中从未被更新,每次计算TotalCredits都是用初始值0加上当前课程的学分,导致每次输出的都是单门课的学分,无法实现累加。
修复方案
调整变量更新逻辑,直接在循环中累加CourseCredits,并在合适的时机输出总学分:
foreach(var stu in students) { var GPA = 0.0; var CourseCredits = 0; // 初始化为0 Console.WriteLine("\nStudent Information"); foreach (KeyValuePair<Courses, Grade[]> item in stu.CompletedCourses) { // 直接累加当前课程学分到CourseCredits CourseCredits += item.Key.numOfCredits; Console.WriteLine("\nName: " + item.Key.courseName + ", Credits: " + item.Key.numOfCredits); // 用更新后的学分计算GPA GPA = stu.calGPA(CourseCredits); // 此时输出的是累加后的总学分 Console.WriteLine("Total Credits: " + CourseCredits); } // 循环结束后输出最终的GPA Console.WriteLine(stu.Name + ": GPA = " + GPA); }
关键修改点
- 移除临时变量
TotalCredits,直接对CourseCredits进行累加操作:CourseCredits += item.Key.numOfCredits;,这样每一次循环都会把当前课程的学分加到总学分里。 - 计算GPA时传入更新后的
CourseCredits,确保GPA计算基于最新的总学分。 - 如果只需要在所有课程遍历完成后输出总学分,可以把
Console.WriteLine("Total Credits: " + CourseCredits);移到内部循环外面,这样只会输出最终的总学分6。
优化建议(可选)
如果不需要在每门课输出后显示总学分,简化后的代码如下:
foreach(var stu in students) { var GPA = 0.0; var CourseCredits = 0; Console.WriteLine("\nStudent Information"); foreach (KeyValuePair<Courses, Grade[]> item in stu.CompletedCourses) { CourseCredits += item.Key.numOfCredits; Console.WriteLine("\nName: " + item.Key.courseName + ", Credits: " + item.Key.numOfCredits); } GPA = stu.calGPA(CourseCredits); Console.WriteLine("Total Credits: " + CourseCredits); Console.WriteLine(stu.Name + ": GPA = " + GPA); }
内容的提问来源于stack exchange,提问作者Jaiylon
相关产品推荐
相关产品推荐

