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

大学生Java新手求助:运行教授代码持续报ArrayOutOfBoundsException

解决Java的ArrayOutOfBoundsException(索引0越界)问题

Exception in thread "main" java.lang.ArrayOutOfBoundsException: Index 0 out of bounds for length 0 这个报错的核心原因很直接:你试图访问一个长度为0的空数组的第0个元素,但这个数组里根本没有任何元素,自然会触发报错。

下面是几种常见的触发场景和对应的解决办法:

常见场景1:手动初始化了长度为0的数组

比如你写了这样的代码:

int[] nums = new int[0];
System.out.println(nums[0]); // 这里直接触发报错

解决办法:

  • 确认数组初始化的长度是否符合需求,比如如果需要存3个元素,就改成new int[3]
  • 如果需要动态添加元素,优先用ArrayList这类集合,之后再按需转成数组,避免手动设置错误长度

常见场景2:调用方法返回了空数组

比如调用某个工具方法时,方法返回的是长度为0的数组,你直接去访问索引0:

public static String[] getEmptyData() {
    return new String[0];
}

public static void main(String[] args) {
    String[] data = getEmptyData();
    System.out.println(data[0]); // 报错
}

解决办法:

  • 在访问数组元素前,先判断数组长度是否大于0,比如:
    if (data.length > 0) {
        System.out.println(data[0]);
    } else {
        System.out.println("数组为空,无法访问元素");
    }
    
  • 检查调用的方法逻辑,确认是否应该返回非空数组

常见场景3:处理输入/外部数据时得到空数组

比如用Scanner读取用户输入,分割后得到空数组:

Scanner sc = new Scanner(System.in);
String[] input = sc.nextLine().split(",");
System.out.println(input[0]); // 如果用户直接回车,split后就是长度0的数组,触发报错

解决办法:

  • 先校验输入内容是否有效,比如判断输入字符串是否为空
  • 同样在访问数组前先检查长度,避免直接访问索引

通用排查步骤

  1. 找到报错信息里提示的代码行,定位到访问数组索引0的那行
  2. 在该行前打印数组的长度(System.out.println(数组名.length);),确认是不是0
  3. 往前追溯这个数组的初始化或来源,找到导致数组为空的原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:44:52