从文本文件中分离姓名与数字:学生成绩统计实现需求
读取学生成绩文件并计算总分、平均分的完整实现
你已经有了Student类的基础框架,只需要补充几个核心方法,再搭配文件读取的逻辑,就能轻松完成这个需求。下面是完整的实现方案:
1. 完善Student类
你提供的Student类缺少添加分数和计算平均分的关键方法,我们先把这些功能补上:
public class Student { private String name; private int numOfQuizzesTaken; private int totalScore; public Student(String name) { this.name = name; // 初始化分数相关字段,避免默认值引发的逻辑问题 this.numOfQuizzesTaken = 0; this.totalScore = 0; } public String getName() { return name; } public int getTotalScore() { return totalScore; } // 添加单个考试分数,同步更新总分和考试次数 public void addScore(int score) { totalScore += score; numOfQuizzesTaken++; } // 计算平均分,返回double类型保证精度,同时处理无分数的边界情况 public double getAverageScore() { if (numOfQuizzesTaken == 0) { return 0.0; // 避免除以0的运行时异常 } return (double) totalScore / numOfQuizzesTaken; } public int getNumOfQuizzesTaken() { return numOfQuizzesTaken; } }
2. 文件读取与结果计算逻辑
接下来编写主处理类,负责读取文本文件、解析每行数据并输出最终结果:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class StudentScoreProcessor { public static void main(String[] args) { // 替换成你的实际文件路径,比如Windows用"C:\\students_scores.txt",Linux/macOS用"/home/user/scores.txt" String filePath = "your_file_path_here.txt"; try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; // 逐行读取文件内容 while ((line = reader.readLine()) != null) { // 按任意数量的空格分割每行数据,trim()避免首尾空格干扰 String[] parts = line.trim().split("\\s+"); if (parts.length < 2) { System.out.println("跳过无效数据行:" + line); continue; } // 第一个元素是学生姓名 String studentName = parts[0]; Student student = new Student(studentName); // 遍历后续元素,转换为分数并添加到学生对象中 for (int i = 1; i < parts.length; i++) { try { int score = Integer.parseInt(parts[i]); student.addScore(score); } catch (NumberFormatException e) { System.out.printf("行「%s」中的「%s」不是有效分数,已跳过\n", line, parts[i]); } } // 格式化输出结果,平均分保留两位小数更直观 System.out.printf("学生姓名:%s\n", student.getName()); System.out.printf("总分:%d\n", student.getTotalScore()); System.out.printf("平均分:%.2f\n\n", student.getAverageScore()); } } catch (IOException e) { System.out.println("读取文件时发生错误:" + e.getMessage()); } } }
关键细节说明
- 文件路径配置:一定要把代码中的
your_file_path_here.txt替换成你实际的文件路径,否则会出现文件找不到的错误。 - 异常处理:代码中处理了三种异常场景:文件不存在/读取失败、数据行格式错误(没有分数)、分数不是有效数字,避免程序直接崩溃。
- 精度控制:平均分用
double类型计算,并用printf格式化输出两位小数,结果更符合日常使用习惯。
运行这个程序后,就能自动读取目标文件中的每一行数据,计算并输出每个学生的姓名、总分和平均分啦!
内容的提问来源于stack exchange,提问作者b w
相关产品推荐
相关产品推荐

