Java成绩分类统计异常求助:为何分类计数全为0?
Java成绩统计程序等级计数错误排查
你编写的Java程序可以正常统计成绩数量和平均分,但等级分类的计数全部为0,问题出在等级判断逻辑的位置和处理时机上,具体原因及修正方案如下:
原代码
import java.util.Scanner; public class Grades { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("enter 5 grades and then -1 to quit!"); System.out.print("enter grade:"); double grade = input.nextDouble(); double total = 0; int count = 0; int A = 0; int B = 0; int C = 0; int D = 0; int F = 0; while (grade != -1) { total = total + grade; System.out.print("enter grade:"); grade = input.nextDouble(); count++; } System.out.println("the number of grades= " + count); System.out.println("Average: " + total / count); if (grade >= 90 && grade <= 100) { A++; } else if (grade >= 80 && grade <= 89) { B++; } else if (grade >= 70 && grade <= 79) { C++; } else if (grade >= 60 && grade <= 69) { D++; } else if (grade >= 0 && grade <= 59) { F++; } System.out.println("number of A grades :" + A); System.out.println("number of B grades :" + B); System.out.println("number of C grades :" + C); System.out.println("number of D grades :" + D); System.out.println("number of F grades :" + F); } }
问题原因
- 等级判断逻辑在循环外部:当while循环结束时,
grade的值已经是-1(触发循环终止的条件),此时执行后续的if-else判断,-1不符合任何一个等级的分数范围,所以所有等级计数都不会增加,保持初始值0。 - 未处理每个输入的成绩:即使循环结束后
grade不是-1,这段逻辑也只会判断最后一次输入的成绩,完全忽略了之前输入的所有有效成绩。
修正后的代码
把等级判断逻辑移到while循环内部,每输入一个有效成绩(不是-1)就立即判断其等级并更新对应计数:
import java.util.Scanner; public class Grades { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("enter grades and then -1 to quit!"); System.out.print("enter grade:"); double grade = input.nextDouble(); double total = 0; int count = 0; int A = 0; int B = 0; int C = 0; int D = 0; int F = 0; while (grade != -1) { total = total + grade; count++; // 每次输入有效成绩后立即判断等级 if (grade >= 90 && grade <= 100) { A++; } else if (grade >= 80 && grade <= 89) { B++; } else if (grade >= 70 && grade <= 79) { C++; } else if (grade >= 60 && grade <= 69) { D++; } else if (grade >= 0 && grade <= 59) { F++; } System.out.print("enter grade:"); grade = input.nextDouble(); } System.out.println("the number of grades= " + count); System.out.println("Average: " + total / count); System.out.println("number of A grades :" + A); System.out.println("number of B grades :" + B); System.out.println("number of C grades :" + C); System.out.println("number of D grades :" + D); System.out.println("number of F grades :" + F); } }
修正后效果
输入示例中的成绩后,会得到符合预期的输出:
enter grade:90
enter grade:99
enter grade:97
enter grade:98
enter grade:87
enter grade:-1
the number of grades= 5
Average:94.2number of A grades :4
number of B grades :1
number of C grades :0
number of D grades :0
number of F grades :0
内容的提问来源于stack exchange,提问作者user22740406
相关产品推荐
相关产品推荐

