You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:05:22