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); } } }
修复说明
- 修正内层循环条件为
j < arr.length,彻底解决数组越界问题 - 使用
boolean[] isCounted标记已统计元素,避免重复输出同一元素的频率 - 每次外层循环初始化
count=1,确保计数从元素自身开始计算 - 保留原数组
arr的原始数据,避免逻辑混乱 - 统计完成后直接打印结果,简化中间存储逻辑
运行结果
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
相关产品推荐
相关产品推荐

