Java读取文件存入Student对象数组读取6门测试分出现数组越界如何解决
错误排查
你遇到的数组越界问题来自可直接修复的代码错误:
- 直接触发异常的原因是读取6门成绩的for循环终止条件写错,错误使用了学生计数变量
i而非成绩计数变量j。i初始为0永远满足i<6的判断,j会一直自增到6,访问长度为6的数组下标6时就触发越界。 - 隐藏bug:成绩数组
tests定义在循环外部,所有学生对象会共享同一个数组,后续学生的成绩会覆盖之前学生的成绩数据。 - 潜在问题:Scanner调用
next()、nextFloat()方法不会消费行尾的换行符,后续调用nextLine()可能读到空字符串,导致姓名读取错误。
修正后的代码
只需要修改readStudentList方法即可,修正后代码如下:
public static int readStudentList(Student[] stu)throws IOException{ int i = 0; Scanner inFile; String name; String id; float quiz; inFile = openFile(); while(inFile.hasNext() && i < stu.length){ // 新增判断避免学生数组越界 name = inFile.nextLine(); if(name.trim().isEmpty()){ // 跳过空行避免读取错误 continue; } id = inFile.next(); float[] tests = new float[6]; // 移到循环内部,每个学生单独创建成绩数组 for(int j = 0; j < 6; j++){ // 修正循环条件为j<6 tests[j] = inFile.nextFloat(); } quiz = inFile.nextFloat(); if(inFile.hasNextLine()){ // 消费行尾剩余换行符 inFile.nextLine(); } stu[i] = new Student(name, id, tests, quiz); i++; } inFile.close(); // 关闭文件流避免资源泄漏 return i; }
内容的提问来源于stack exchange,提问作者alex perez
相关产品推荐
相关产品推荐

