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

从文本文件中分离姓名与数字:学生成绩统计实现需求

读取学生成绩文件并计算总分、平均分的完整实现

你已经有了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:16:29