【问题标题】:Collecting multiple Variables from one loop从一个循环中收集多个变量
【发布时间】:2014-09-22 05:06:38
【问题描述】:

我正在为大学做一个项目,并且已经坐了 3 个小时来试图找出解决这个问题的方法。问题是:

场景

您想计算一个学生在一个学期内参加的多个课程的 GPA(平均绩点)。

输入

  1. 学生的姓名。
  2. 学生所学课程的班级名称。
  3. 学生所学课程的班级字母成绩。
  4. 学生所学课程的课程学分。

处理

  1. 接受并处理类,直到用户指示它们完成为止。
  2. 累计学生所学的学分。
  3. 计算学生获得的“积分”总数为: 一种。对于每个班级,通过将该班级的学分乘以字母等级的数字等值来计算分数。 (A=4.0, B=3.0, C=2.0, D=1.0, F=0) 湾。所有课程的总分。
  4. 将 GPA 计算为“积分”总数除以总学分。

输出

显示一条措辞优美的信息,其中包括学生的姓名和该学生在该学期取得的 GPA(带 2 位小数的小数点)。

我目前拥有的是:

static void Main(string[] args)
{
    String StudentName;

    //Error Trapping
    try
    {
        Console.WriteLine("Welcome to The GPA Calculator");
        Console.WriteLine("Hit any key to continue...");
        Console.ReadKey();

        Console.Write("Please enter your name: ");
        StudentName = Convert.ToString(Console.ReadLine());
        InputGradeInfo();
    }

    //Error Repsonse
    catch (System.Exception e)
    {
        Console.WriteLine("An error has Occurred");
        Console.WriteLine("The error was: {0}" , e.Message);
        //Belittle the User
        Console.WriteLine("Good Job, you Broke it.");
        Console.ReadLine();
    }
}

public static double InputGradeInfo()
{
    String ClassName;
    Char LetterGrade;
    Double LetterGradeValue;
    Double CreditHours;
    Double ValueOfClass;

    Console.Write("Please enter the class title: ");
    ClassName = Convert.ToString(Console.ReadLine());

    Console.Write("Please enter the total credits this class is worth: ");
    CreditHours = Convert.ToDouble(Console.ReadLine());

    Console.Write("Please enter the grade letter recived: ");
    LetterGrade = Convert.ToChar(Console.ReadLine());
    switch (LetterGrade)
    {
        case 'a': LetterGradeValue = 4;
            break;
        case 'A': LetterGradeValue = 4;
            break;
        case 'b': LetterGradeValue = 3;
            break;
        case 'B': LetterGradeValue = 3;
            break;
        case 'c': LetterGradeValue = 2;
            break;
        case 'C': LetterGradeValue = 2;
            break;
        case 'd': LetterGradeValue = 1;
            break;
        case 'D': LetterGradeValue = 1;
            break;
        case 'f': LetterGradeValue = 0;
            break;
        case 'F': LetterGradeValue = 0;
            break;
        default: LetterGradeValue = 0;
            break;
    }

    ValueOfClass = CalculateClass(LetterGradeValue, CreditHours);
    return ValueOfClass;
}

public static double CalculateClass(double LetterGrade, double CreditHours)
{
    Double CreditTotal;
    CreditTotal = CreditHours * LetterGrade;
    return CreditTotal;
}

我遇到的问题是如何循环信息收集,每次将其保存到不同的变量,然后在最后使用用户输入打破循环。我们还没有了解数组,所以不在讨论范围内。在我把那个循环收集下来之后,计算总 GPA 和显示就不难了。

另外我还没有了解创建的类,所以我也不能使用它们

【问题讨论】:

  • 那么问题来了?
  • 在创建 list.Sum() 之后将所有成绩保存在 List 或 List 中。还有你的循环在哪里?
  • //Belittle the Userlol ...你可能会重新考虑这个;)

标签: c#


【解决方案1】:
    static void Main(string[] args)
    {
        String StudentName;

        //Error Trapping
        try
        {
            Console.WriteLine("Welcome to The GPA Calculator");
            Console.WriteLine("Hit any key to continue...");
            Console.ReadKey();

            Console.Write("Please enter your name: ");
            StudentName = Convert.ToString(Console.ReadLine());

            List<double> gradeInfoList = new List<double>();
            List<double> creditList = new List<double>();
            bool brakeLoop = false;

            while (!brakeLoop)
            {
                gradeInfoList.Add(InputGradeInfo(creditList));

                Console.WriteLine("Do you want to continue(y/n): ");
                brakeLoop = Console.ReadLine() != "y";
            }


            Console.WriteLine(StudentName + " GPA is: " + gradeInfoList.Sum() / creditList.Sum());
        }

        //Error Repsonse
        catch (System.Exception e)
        {
            Console.WriteLine("An error has Occurred");
            Console.WriteLine("The error was: {0}", e.Message);
            //Belittle the User
            Console.WriteLine("Good Job, you Broke it.");
            Console.ReadLine();
        }
    }

    public static double InputGradeInfo(List<double> creditList)
    {
        String ClassName;
        Char LetterGrade;
        Double LetterGradeValue;
        Double CreditHours;
        Double ValueOfClass;

        Console.Write("Please enter the class title: ");
        ClassName = Convert.ToString(Console.ReadLine());

        Console.Write("Please enter the total credits this class is worth: ");
        CreditHours = Convert.ToDouble(Console.ReadLine());
        creditList.Add(CreditHours);

        Console.Write("Please enter the grade letter recived: ");
        LetterGrade = Convert.ToChar(Console.ReadLine().ToUpper());
        switch (LetterGrade)
        {
            case 'A': LetterGradeValue = 4;
                break;
            case 'B': LetterGradeValue = 3;
                break;
            case 'C': LetterGradeValue = 2;
                break;
            case 'D': LetterGradeValue = 1;
                break;
            case 'F': LetterGradeValue = 0;
                break;
            default: LetterGradeValue = 0;
                break;
        }

        ValueOfClass = CalculateClass(LetterGradeValue, CreditHours);
        return ValueOfClass;
    }

    public static double CalculateClass(double LetterGrade, double CreditHours)
    {
        Double CreditTotal;
        CreditTotal = CreditHours * LetterGrade;
        return CreditTotal;
    }

你可能想要这个。您需要一个 while 循环来获取所有课程,如果您说不想继续或输入另一个输入,则循环会停止。您使用gradeInfoList.Sum() 函数制作gradeInfoList。

您的变量也应该以小写字母 StudentName->studentName 开头!

编辑: gpa List 是一个集合,它存储来自 InputGradeInfo() 的所有值。 Sum() 函数在做什么:

 double sum = 0;
 foreach(double d in gpa)
 {
     sum= sum + d; //(or sum+= d;) 
 }

换句话说,循环gradeInfoList集合中的所有元素并将它们相加。

关于while循环->这个循环将一直执行到括号中的条件被破坏。在这种情况下,您可以添加许多类,直到最后单击“y”。如果你点击 'y' 中的其他内容,你将打破循环。

我添加了另一个列表 creditList,您将把它作为参数添加到 InputGradeInfo。在此列表中,您将存储每个课程的每个学分。最后你会得到gradeInfoList .Sum()/creditList.Sum() 这会给你你想要的。

【讨论】:

  • 我不确定 gpa.sum() 函数是什么。
  • 我们在进行基本的 C# 编程,所以我不确定这些编辑到底做了什么。如果您可以添加对您在那里所做的事情以及如何完成此操作的说明,那么放在我的后袋中以备后用会很好
  • 我不确定这种方法是否有效,因为我还需要将多个课程划分为所有课程的学分总数
  • @I'mTryin 你想要 CreditTotalSum/AllTheCredits。例如,在 X 班我有 3 个 A 学分,在 Y 班我有 5 个 D 学分。最后你想要 (3*4+5*1)/8 吗?
  • 这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多