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

Java学生成绩录入程序抛出数组越界异常,如何排查解决?

数组越界异常产生原因
  • 类的成员变量student为int类型,Java 中类的非静态成员整型变量默认初始值为 0
  • 数组arr的初始化逻辑写在了类属性声明位置,此时类实例创建阶段尚未执行score()方法中读取用户输入、给student赋值的逻辑,实际执行的数组初始化语句等价于new int[0][5],即数组第一维长度为0
  • 后续循环向arr[i][j]写入成绩时,第一维没有任何可访问的索引,因此直接触发ArrayIndexOutOfBoundsException
具体修复方案

核心调整为将数组初始化时机延后到用户输入学生人数之后,具体修改点:

  • 将原属性声明处的数组初始化语句改为仅声明数组,不在类创建阶段分配内存
  • 在score()方法中拿到用户输入的学生总人数后,再根据实际人数初始化二维数组

修复后完整代码:

import java.util.Scanner;

public class Mid {
    Scanner scan = new Scanner(System.in);
    int student;
    // 仅声明数组,不提前初始化
    int arr[][];
    String str[]= {"science","math","english"};
    
    public void score() {
        System.out.println("how many student?");
        student=scan.nextInt();
        // 获取学生人数后再初始化数组,第二维大小可根据后续存储需求调整
        arr = new int[student][5];
        
        for(int i=0;i<student; i++) {
            for(int j=0;j<3;j++) {
                System.out.println("input " + (i+1) + " student " + str[j] + " score");
                arr[i][j]=scan.nextInt();
            }
        }
    }
}

补充说明:如果不需要预留数组第二维的额外空间(如后续存储总分、平均分等),可将数组初始化语句改为arr = new int[student][3],和科目数量一一对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 02:45:05