从一个循环中收集多个变量

时间:2014-09-22 05:06:38

标签: c#

我正在为一所大学项目工作并且坐在这里试图找到解决这个问题的方法,现在已经有3个小时了。问题是:

方案

您想要计算学生在一个学期内学习的多个班级的GPA(平均成绩点)。

输入

  1. 学生的名字。
  2. 学生所上课程的班级名称。
  3. 学生所上课程的班级成绩。
  4. 学生所上课程的学分。
  5. 处理

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

      显示一条包含学生姓名的明确措辞消息,以及该学期学生达到的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并显示并不困难。

      此外,我还没有了解创建的课程,所以我无法使用这些课程

1 个答案:

答案 0 :(得分: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-&gt; studentName!

开头

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

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

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

关于while循环 - &gt;此循环将执行,直到括号中的条件被破坏。在这种情况下,您可以添加许多类,直到您点击&#39; y&#39;在末尾。如果您点击“&#39; y&#39;中的其他内容你会打破循环。

我添加另一个列表creditList,您将其作为参数添加到InputGradeInfo中。在此列表中,您将存储每个班级的每个学分。最后你将获得gradeInfoList .Sum()/ creditList.Sum(),这将为你提供你想要的。