C#创建评分程序

时间:2017-10-10 12:09:43

标签: c# loops if-statement

所以我正在尝试创建一个分级程序,用户在主题上输入1-100之间的数字;数学,健身房和教室,平均数量上升,使学生在A-F之间得分。

我陷入循环,我不知道如何编码,所以如果我输入平均80分,B级就会出现。它出现了无法检测到的代码。

  static string GradeMe(int average)
 {
         int grades1 = 90; (took away the const)
         int grades2 = 75;

       if (grades1 >= 90 && grades1 <= 100) 
           { 
              return "Grade A"; 
           } 

     (???->) else if (grades2 >= 75 && grades32 <= 89) {return "Grade B";}
    }

static int CalculateAverageGrades(int math, int gym, int classroom)
  {
        int sum = math + gym + classroom;
        return sum / 3;
    }
      static void Main(string[] args)
    {
        Console.WriteLine("math: ");
        int math= Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("gym: ");
        int gym = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("classroom: ");
        int classroom = Convert.ToInt32(Console.ReadLine());

        int medeltal = CalculateAverageGrades(math, gym, classroom); //hämtar calculate metoden

        Console.WriteLine("medel: " + medeltal);

        string grade = GradeMe(medeltal);
        Console.WriteLine(grade);

3 个答案:

答案 0 :(得分:1)

您正在寻找else if建筑:

  //TODO: out the right thresholds 
  static string GradeMe(int average) {
    if (average >= 90)           // 90+ 
      return "Grade A";
    else if (average >= 80)      // [80..90)
      return "Grade B";
    else if (average >= 70)      // [70..80)
      return "Grade C";
    else if (average >= 50)      // [50..70) 
      return "Grade D";
    else                         // less than 50
      return "Grade E";       
  }

三元运营商? :更短不太可读替代方案:

  static string GradeMe(int average) {
    return average >= 90 ? "Grade A"
         : average >= 80 ? "Grade B"
         : average >= 70 ? "Grade C"
         : average >= 50 ? "Grade D"
         : "Grade E";
  } 

编辑:如果您想重复,循环就是解决方案;我建议也提取方法ReadGrade

   static int ReadGrade(string title) {
     while (true) {
       Console.WriteLine(title);

       int result = 0;

       if (int.TryParse(Console.ReadLine(), out result) &&
           result >= 0 &&
           result <= 100)
         return result;

       Console.WriteLine("Please, try again"); 
     }
   }

   static void Main(string[] args) {
     do {
       int medeltal = (ReadGrade("math: ") +
                       ReadGrade("gym: ") + 
                       ReadGrade("classroom: ")) / 3;

       Console.WriteLine(GradeMe(medeltal));

       Console.WriteLine("Next grade (Y/N)?");
     }
     while (string.Equals("Y", 
                           Console.ReadLine().Trim(), 
                           StringComparison.OrdinalIgnoreCase))
   }

答案 1 :(得分:0)

在功能GradeMe()中,您创建const int grades1 = 90;const int grades2 = 75;,然后检查条件if (grades1 >= 90 && grades1 <= 100),这始终为真,因为grades1 >= 90为真且{{1 }} 是真的。所以永远不会达到你的其他声明。

你必须检查&#34中的平均值;如果&#34; =&GT;

grades1 <= 100

等等。

最重要的是功能的所有部分都必须返回一些值。你必须写&#39;否则&#39;对于最后一个案例

答案 2 :(得分:0)

*首先你没有定义<span>click to toggle iframe's focus</span>而是定义了2级

*秒他们(grade32grade1grade2,...)不是传入值,调用者方法传递给grade32方法,但GradeMe(),因此您应该将这些值与您的文字值进行比较。

第三,你的第一个条件会捕获得分为90到100的项目,所以不是你不能,但你不需要在你的第二个条件表达中再次提及它,并且只是说它大于75 ..

average

因为您使用if(x>=90 && x<=100) return "A"; if(x>=75) return "B"; if(x>=50) return "C"; .... return "F"; ,所以您也不需要return,因为该方法会返回,您可以省略所有else