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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:36:03