You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
    }
}

问题原因

  1. 等级判断逻辑在循环外部:当while循环结束时,grade的值已经是-1(触发循环终止的条件),此时执行后续的if-else判断,-1不符合任何一个等级的分数范围,所以所有等级计数都不会增加,保持初始值0。
  2. 未处理每个输入的成绩:即使循环结束后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.2

number 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:35:05