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

ArrayList循环触发IndexOutOfBoundsException,求错误排查与解决

问题排查:ArrayList索引越界异常(IndexOutOfBoundsException)

错误根源

你遇到的IndexOutOfBoundsException是因为循环终止条件错误。ArrayList的索引范围是0到revenues.size() - 1,当循环执行到i = revenues.size() - 1(也就是最后一个元素的索引)时,代码里的revenues.get(i+1)会尝试访问索引revenues.size()——这个位置不存在,直接触发索引越界。

你的需求是对比相邻两年的营收,因此循环只需要遍历到倒数第二个元素即可,不需要覆盖最后一个元素(因为它没有下一个元素可以对比)。

额外的逻辑问题

除了索引越界,你的代码还有两个小问题:

  1. 年份编号混乱:开头打印了Year 1,但循环里的(i)会输出Year 0、Year 1等,和实际年份对应不上。
  2. 拼写错误:comperison应该是comparison。

修正后的代码

System.out.println("Year 1: No comparison");
// 循环到倒数第二个元素停止,避免i+1越界
for (int i = 0; i < revenues.size() - 1; i++) {
    if (revenues.get(i) < revenues.get(i+1)) {
        // i从0开始,对应第1年和第2年的对比,输出第2年的变化
        System.out.println("Year " + (i + 2) + ": increased");
    } else if (revenues.get(i) > revenues.get(i+1)) {
        System.out.println("Year " + (i + 2) + ": decreased");
    } else {
        System.out.println("Year " + (i + 2) + ": stayed the same");
    }
}

修正说明

  • 循环条件改为i < revenues.size() - 1:确保每次i+1都在ArrayList的合法索引范围内。
  • 年份调整为i+2:让输出的年份和实际对比的周期对应,比如i=0时对比第1、2年,输出Year 2的变化。
  • 修正了拼写错误,让提示文本更规范。

内容的提问来源于stack exchange,提问作者O D E

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:55:24