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

如何将字符串中double值存入ArrayList<Double>及Java读文件无输出排查

问题原因及修复方案

无输出的核心原因

你的代码全程只有数据读取和写入ArrayList的逻辑,没有添加任何控制台输出语句,程序执行完所有逻辑后直接退出,自然不会有任何内容打印到控制台,这是你看到空白的直接原因。

代码存在的其他逻辑错误

除了没有输出之外,你的代码还有多处不符合需求的问题:

  • 创建student实例时硬编码传入了空姓名、空姓氏、0编号,完全没有从students.txt的行内容里解析这三个属性,最终所有实例的这三个字段都是无效值
  • 读取成绩时仅用if判断了一次hasNextDouble(),只会添加每行的第一个成绩,如果一行包含多个成绩,剩余成绩会全部丢失,应该改用while循环读取完整行所有成绩
  • 要确认你自定义的student类已经正确实现了三参数构造方法、addGrade公共方法,属性都正确初始化,否则会出现隐式逻辑错误
  • 不符合Java命名规范:类名应该使用大驼峰格式,建议将readFile改为ReadFile,student改为Student

修正后参考代码

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

// 按规范修改类名为大驼峰
public class ReadFile {
    // 先给出正确的Student类定义示例,如果你还没写可以参考
    static class Student {
        private String firstName;
        private String lastName;
        private int id;
        private ArrayList<Double> grades;

        public Student(String firstName, String lastName, int id) {
            this.firstName = firstName;
            this.lastName = lastName;
            this.id = id;
            this.grades = new ArrayList<>();
        }

        public void addGrade(double grade) {
            this.grades.add(grade);
        }

        // 重写toString方便打印输出
        @Override
        public String toString() {
            return "Student{" +
                    "姓名='" + firstName + '\'' +
                    ", 姓氏='" + lastName + '\'' +
                    ", 编号=" + id +
                    ", 成绩=" + grades +
                    '}';
        }
    }

    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        try(BufferedReader br = new BufferedReader(new FileReader("students.txt"))) {
            String line;
            while((line = br.readLine()) != null) {
                Scanner scan = new Scanner(line);
                // 假设每行格式为:姓名 姓氏 编号 成绩1 成绩2 成绩3...,按实际格式调整解析顺序
                String firstName = scan.next();
                String lastName = scan.next();
                int id = scan.nextInt();
                Student newStudent = new Student(firstName, lastName, id);
                // 循环读取所有成绩
                while(scan.hasNextDouble()) {
                    newStudent.addGrade(scan.nextDouble());
                }
                students.add(newStudent);
                scan.close();
            }
        } catch(FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 新增输出逻辑,打印所有学生信息
        for(Student s : students) {
            System.out.println(s);
        }
    }
}

注意:上述解析逻辑假设students.txt每行的内容顺序为姓名 姓氏 编号 多个成绩,如果你的文件格式不同,需要调整字段解析的顺序和逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:36:04