创建考试成绩平均值类及代码功能异常排查咨询
解决考试成绩统计问题:支持多成绩存储与平均值计算
嘿,我来帮你搞定这个问题!你遇到的核心问题是之前的实现只用了单个变量存储成绩,导致新输入的分数会覆盖旧数据,还没法统计考试次数。咱们换个思路,用集合来保存所有成绩,就能轻松满足需求啦。
1. 创建支持多成绩的TestScoreAverage类
这个类会用动态列表存储所有考试成绩,同时提供添加成绩、统计考试次数、计算平均值的方法:
import java.util.ArrayList; import java.util.List; public class TestScoreAverage { // 用ArrayList存储所有成绩,支持不限数量的输入 private List<Double> scores; // 构造方法初始化成绩列表 public TestScoreAverage() { scores = new ArrayList<>(); } // 添加单个成绩的方法 public void addScore(double score) { scores.add(score); } // 获取考试次数(直接返回成绩的数量) public int getExamCount() { return scores.size(); } // 计算成绩平均值,处理无成绩的边界情况 public double getAverage() { if (scores.isEmpty()) { return 0.0; // 也可以根据需求抛出异常,这里返回0更友好 } double total = 0.0; for (double score : scores) { total += score; } return total / scores.size(); } }
2. 配合不可修改的TestScoresDemo使用
假设教师提供的TestScoresDemo是用来处理用户输入的,现在只需要在Demo里实例化TestScoreAverage,调用它的方法就能完成多成绩统计。比如模拟Demo的使用逻辑:
import java.util.Scanner; public class TestScoresDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); TestScoreAverage scoreAverage = new TestScoreAverage(); // 循环读取成绩,直到用户输入-1结束 System.out.println("请输入考试成绩(输入-1结束):"); while (true) { double score = scanner.nextDouble(); if (score == -1) { break; } scoreAverage.addScore(score); } // 输出统计结果 System.out.println("一共进行了 " + scoreAverage.getExamCount() + " 次考试"); System.out.printf("成绩平均值为:%.2f", scoreAverage.getAverage()); scanner.close(); } }
关键逻辑说明
ArrayList动态存储:它能自动扩容,完美支持不限数量的成绩输入,不会丢失任何历史分数。- 考试次数统计:直接返回列表的大小,不用额外维护计数器变量,简洁又准确。
- 平均值计算:遍历列表求和再除以成绩数量,同时处理了没有成绩的边界场景,避免运行时错误。
这样修改后,你的代码就能完整保存所有输入的成绩,准确统计考试次数,并且计算出正确的平均值啦!
内容的提问来源于stack exchange,提问作者Gerry Leon
相关产品推荐
相关产品推荐

