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

Java数组元素计数遇ArrayIndexOutOfBoundsException:索引与长度相同

问题排查与解决

1. 数组越界异常(ArrayIndexOutOfBoundsException)

问题根源在两处:

  • 外层循环条件i < letterGrade.length - 1:既会漏掉数组最后一个元素,还会因为内层循环修改i后,外层的i++导致i取值超出预期,最终触发索引越界(你的错误里索引125,刚好是长度125的数组的越界值)。
  • i += (count-1)逻辑错误:count统计的是当前元素之后的相同元素数量,未包含当前元素本身,偏移量计算错误会导致循环逻辑混乱。

调整方式:

  • 外层循环条件改为i < letterGrade.length,确保所有元素都能被遍历处理。
  • 将count初始值设为1(计入当前元素),i += (count - 1)保留即可(此时count包含当前元素,跳过count-1个元素刚好到下一个不同元素)。

2. 成绩计数重复、混乱

核心问题是输出位置和计数初始值错误:

  • 输出语句放在内层循环中:每次j循环都会执行打印,导致同一个成绩被重复输出。
  • count初始值为0:未将当前元素letterGrade[i]计入统计,导致最终计数比实际少1。

调整方式:

  • 将System.out.println移到内层循环外部,等count统计完所有相同元素后再打印,避免重复输出。
  • count初始值设为1,确保统计数量准确。

调整后的完整代码

public static String gradesDistn() {
    String gradeDistn = "0";
    
    Arrays.sort(letterGrade);
    
    for (int i = 0; i < letterGrade.length; i++) {
        int count = 1; // 先计入当前元素
        for(int j = i + 1; j < letterGrade.length; j++) {
            if  (letterGrade[i] == letterGrade[j]) 
                count++;
        }
        // 统计完成后统一输出
        gradeDistn = letterGrade[i] + ": " + count;
        System.out.println(gradeDistn);
        i += (count - 1); // 跳过已统计的相同元素,避免重复处理
    }  
    return gradeDistn;
}

补充说明

原代码中gradeDistn每次都会被覆盖,最终返回的是最后一个成绩的统计结果,若需返回所有统计内容,可改为字符串拼接(如gradeDistn += letterGrade[i] + ": " + count + "\n";),但作业要求不能修改指定方法的话,保持原返回逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:18:37