Java成绩计算程序异常:仅首次输入有效,后续成绩超100
问题分析
你遇到的问题核心是成绩累加变量没有在每个学生计算前重置。sum和average变量定义在所有学生循环的外部,处理第一个学生时是正常的,但处理第二个学生时,sum会保留第一个学生的成绩总和,再加上当前学生的成绩,最终计算出的平均分自然会远超100分。
修复后的代码
import java.io.IOException; import java.io.PrintWriter; import java.util.Scanner; public class programmingProjectGrades { public static void main(String[] args) throws IOException { Scanner scn = new Scanner(System.in); PrintWriter out = new PrintWriter("grades.txt"); System.out.println("Please enter the number of students you wish to enter: "); int numberOfStudents = scn.nextInt(); for(int i = 0; i < numberOfStudents; i++){ // 将每个学生的成绩统计变量放到循环内部,每次循环重置 double sum = 0; double average = 0; int studentsGrades = 0; String letterGrade; System.out.println("Student's Name: " ); String students_name = scn.next(); System.out.println("Enter 5 test scores for this student : "); for (int x = 0;x < 5; x++) { studentsGrades = scn.nextInt(); sum += studentsGrades; } // 平均分计算移到内层循环结束后,避免重复计算 average = sum /5; if (average >= 90){ letterGrade = "A"; } else if (average >= 80){ letterGrade = "B"; } else if (average >= 70){ letterGrade = "C"; } else if (average >= 60){ letterGrade = "D"; } else { letterGrade = "F"; } out.println(students_name); out.println("Final Grade: " + average); out.println("Letter Grade: " + letterGrade); } out.close(); } }
关键修复点
- 将
sum、average、studentsGrades、letterGrade这些仅属于单个学生的变量移到外层for循环(学生循环)的内部,这样每个学生开始计算时,这些变量都会被重新初始化,不会保留上一个学生的数据。 - 把
average = sum /5;移到内层循环(成绩输入循环)的外面,不需要每次输入成绩都计算平均分,只需要在5次成绩都输入完成后计算一次即可,提升效率。
内容的提问来源于stack exchange,提问作者Serdyna
相关产品推荐
相关产品推荐

