2014-10-11 73 views
0

我正在编写一个程序,用户在课堂上输入一些学生的数量,然后输入每个学生的姓名和考试分数。然后该程序会计算出学生的成绩并为其分配相应的字母等级。最后,它将他们的分数添加到classSum中,计算平均班级分数并显示它。Java GradeCalculator - 虽然循环无法正常工作

这是我到目前为止有: 公共类GradeCalculator {

public static void main(String[] args) { 
     int classSum = 0;  // variable used to hold sum of entire classes exams 
     int classExams = 0;  // variable used to hold number of exams taken by whole class 

     Scanner s = new Scanner(System.in); 

     System.out.println("Welcome to Gradecalculator!"); 
     System.out.println("Please enter the number of students:"); 
     int students = s.nextInt(); 

     System.out.println("Please enter the number of exams:"); 
     int exams = s.nextInt(); 

     int i = 0; 
     int studentnumber = 1; 
     int sum = 0; 

     while (i < students) { // loop until it matches number of students entered above 
      i++; 
      sum = 0; 

      System.out.println("Enter student " + studentnumber++ + "'s name :"); 
      String studentname = s.next(); 

      System.out.println("Enter exam scores :"); 

      int input = 0; 
      for (; input < exams; input++) { 
       int n = s.nextInt(); 
       sum+=n; 

       if (n < 0) { 
        System.out.println("Invalid exam scores, reenter: "); //if one of the scores entered is  negative, display message 
       } 
      } 

      double average = sum/exams;  // assign letter grade based on average of exams 
      if (average <= 100 && average >= 90) { 
       System.out.println("Letter grade: A"); 
       System.out.println(studentname + " gets 4 stars! ****"); 
      } if (average <= 89 && average >= 80) { 
       System.out.println("Letter grade: B"); 
       System.out.println(studentname + " gets 3 stars! ***"); 
      } if (average <= 79 && average >= 70) { 
       System.out.println("Letter grade: C"); 
       System.out.println(studentname + " gets 2 stars! **"); 
      } if (average <= 69 && average >= 60) { 
       System.out.println("Letter grade: D"); 
       System.out.println(studentname + " gets 1 star! *"); 
      } if (average <= 59) { 
       System.out.println("Letter grade: F"); 
       System.out.println(studentname + " gets 0 stars!"); 
      } 

      classSum += sum;    // add sum of this student's scores to the classSum 
      classExams += exams; // add exams taken by this student to amount of exams taken by whole class 
     } 

     int classAverage = classSum/classExams; // compute class average 
     System.out.println("Class statistics:"); 
     System.out.println("\tAverage: " + classAverage); 
    } 
} 

这是输出我得到:

Welcome to Gradecalculator! 

Please enter the number of students: 

2 

Please enter the number of exams: 

3 

Enter student 1's name : 

sam 

Enter exam scores : 

80 80 80 

Letter grade: B 

sam gets 3 stars! *** 

Enter student 2's name : 

joe 

Enter exam scores : 

90 90 90 

Class statistics: 

Average: 125 

正如你可以看到,第一个学生后,进入名称和考试分数不会显示下一个学生的信件成绩,因为该循环应该这样做。此外,班级平均数不正确计算。我在这里遇到了一些问题,我在哪里出错。

+0

咦每转?我确实接受了答案,因为他帮助我解决了我的问题。我不想继续打扰我的下一个问题,这是不同的。 – sam 2014-10-11 22:35:24

回答

0

你必须总和设置为0环

while (i < students) { // loop until it matches number of students entered above 
    i++; 
    sum = 0; 

    System.out.println("Enter student " + studentnumber++ + "'s name :"); String studentname = s.next(); 
    // [...] 
+0

事情是我需要将每个学生的成绩添加到班级总和中,以便计算最后一步中的班级平均成绩。 – sam 2014-10-11 22:57:42

+0

是的,它仍然是classSum的情况下,sum只是用于存储当前学生成绩的临时变量 – ToYonos 2014-10-11 23:00:29

+0

啊,好的。按照您的指示,将sum = 0添加到循环的开头。现在发生的情况是,在我输入第一个学生的分数后,它给了我正确的分数和消息,但是不允许我输入下一个学生的名字(它跳转直接输入下一个学生的分数)。任何想法为什么会发生? – sam 2014-10-11 23:02:59

0

您不会在循环内重置(指定为零)sum。这意味着在山姆之后,当轮到他的时候,他的分数会被添加到山姆的顶端!出于这个原因,您必须在得分读数和添加循环之前重置sum

这也是为什么它没有打印任何关于Joe的原因。由于您基本上只有六次考试成绩的总和除以三次,所以得到的结果超过了一百次,而且这不包含在您的任何if陈述中。