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

Java成绩计算器方法实现求助:仅用calAverage和determineGrade方法

帮你修正成绩计算器的代码问题

嘿,我瞅了下你写的代码,确实踩了几个Java基础的小坑,我帮你把问题拆解开,再给你修正后的完整代码:

先说说你代码里的核心问题

  • 静态方法调用问题:main是静态方法,直接调用非静态的calAverage和determineGrade会报错,得把这两个方法改成static的才行。
  • calAverage方法逻辑混乱:
    • 循环条件i>5完全写反了,应该是i<5(假设你要计算5个成绩的平均分);
    • 每次循环里直接return grade会导致方法刚接收第一个成绩就结束,根本没法累加计算总分和平均分;
    • 方法参数定义错了,这个方法的作用是读取成绩、计算并返回平均分,不需要传int average当参数。
  • determineGrade方法逻辑缺失:
    • 参数应该接收计算好的平均分,而不是用没定义的变量;
    • 等级是字母(A/B/C/D/F),返回类型应该是char而不是int;
    • 完全没有根据分数范围判断等级的逻辑。
  • main方法里的调用错误:
    • 调用calAverage的时候不能写int grade当参数,直接调用就行;
    • 输出的grade变量根本没定义,finalGrade应该接收determineGrade返回的等级。

修正后的完整代码

import java.util.Scanner;

public class MorenoJonathonGrader {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter 5 grades:");
        
        // 调用calAverage计算平均分
        int average = calAverage(sc);
        // 调用determineGrade获取等级
        char finalGrade = determineGrade(average);
        
        // 输出结果
        System.out.println("Average grade: " + average);
        System.out.println("Final letter grade: " + finalGrade);
        
        sc.close(); // 记得关闭Scanner,养成好习惯
    }

    // 计算平均分的静态方法,把Scanner传进来避免重复创建实例
    public static int calAverage(Scanner sc) {
        int total = 0;
        int numGrades = 5; // 这里设定计算5个成绩的平均分,你也可以改成让用户输入数量
        
        for (int i = 0; i < numGrades; i++) {
            System.out.print("Enter grade " + (i+1) + ": ");
            int grade = sc.nextInt();
            total += grade; // 把每个成绩累加到总分里
        }
        
        return total / numGrades; // 返回平均分(如果要更精确可以改成double类型)
    }

    // 根据平均分判断等级的静态方法
    public static char determineGrade(int average) {
        if (average >= 90) {
            return 'A';
        } else if (average >= 80) {
            return 'B';
        } else if (average >= 70) {
            return 'C';
        } else if (average >= 60) {
            return 'D';
        } else {
            return 'F';
        }
    }
}

额外小提示

  • 如果你想支持任意数量的成绩,可以修改calAverage方法,先让用户输入要计算的成绩数量,再循环读取;
  • 如果需要保留小数的平均分,可以把average改成double类型,calAverage的返回类型也改成double,判断等级的逻辑不用变。

内容的提问来源于stack exchange,提问作者user9424437

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:54:53