如何将字符串中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
相关产品推荐
相关产品推荐

