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
相关产品推荐
相关产品推荐

