ArrayList循环触发IndexOutOfBoundsException,求错误排查与解决
问题排查:ArrayList索引越界异常(IndexOutOfBoundsException)
错误根源
你遇到的IndexOutOfBoundsException是因为循环终止条件错误。ArrayList的索引范围是0到revenues.size() - 1,当循环执行到i = revenues.size() - 1(也就是最后一个元素的索引)时,代码里的revenues.get(i+1)会尝试访问索引revenues.size()——这个位置不存在,直接触发索引越界。
你的需求是对比相邻两年的营收,因此循环只需要遍历到倒数第二个元素即可,不需要覆盖最后一个元素(因为它没有下一个元素可以对比)。
额外的逻辑问题
除了索引越界,你的代码还有两个小问题:
- 年份编号混乱:开头打印了
Year 1,但循环里的(i)会输出Year 0、Year 1等,和实际年份对应不上。 - 拼写错误:
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
相关产品推荐
相关产品推荐

