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

Java报错ArrayIndexOutOfBoundsException:索引9超出数组长度9求解决

问题排查与修复

直接错误原因

java.lang.ArrayIndexOutOfBoundsException的触发点是内层for循环的终止条件写错:

for (int j = i + 1; i < arr.length; j++) {

这里循环条件误写为i < arr.length,而正确的应该是j < arr.length。i在循环过程中不会改变,导致j会持续自增,直到超过数组最大索引(数组长度为9,合法索引范围是0-8),当j=9时就触发了越界异常。

其他逻辑问题

除了越界错误,原代码还有多处逻辑缺陷:

  • count变量未在外层循环开始时重置,会导致不同元素的计数累加混乱
  • 直接修改原数组arr的元素值,破坏了原始数据,导致后续统计逻辑失效
  • arr2的赋值逻辑错误,没有正确记录元素的出现次数

修复后的完整代码

public class ElementFrequencyCounter {
    public static void main(String[] args) {
        int[] arr = new int[]{101, 88, 3, 65, 6, 3, 0, 0, 88};
        // 标记已统计过的元素,避免重复输出
        boolean[] isCounted = new boolean[arr.length];

        for (int i = 0; i < arr.length; i++) {
            if (isCounted[i]) {
                continue;
            }
            // 初始计数为1,元素自身至少出现一次
            int count = 1;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] == arr[j]) {
                    count++;
                    isCounted[j] = true;
                }
            }
            System.out.println("Count of " + arr[i] + " = " + count);
        }
    }
}

修复说明

  1. 修正内层循环条件为j < arr.length,彻底解决数组越界问题
  2. 使用boolean[] isCounted标记已统计元素,避免重复输出同一元素的频率
  3. 每次外层循环初始化count=1,确保计数从元素自身开始计算
  4. 保留原数组arr的原始数据,避免逻辑混乱
  5. 统计完成后直接打印结果,简化中间存储逻辑

运行结果

Count of 101 = 1
Count of 88 = 2
Count of 3 = 2
Count of 65 = 1
Count of 6 = 1
Count of 0 = 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:35:21