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

Java for循环未终止且抛出ArrayOutOfBoundsException的原因是什么?

问题根因

你代码的核心问题出在for循环的终止条件校验逻辑不匹配实际下标访问范围:

  • 循环当前终止条件仅保证i < iValues.length,仅能确保iValues[i]访问合法
  • 但循环体内实际还访问了iValues[i+1],当i等于数组最大合法下标(即iValues.length - 1)时,i+1等于数组长度,超出了Java数组的合法下标范围(数组下标从0开始,最大为长度减1),就会抛出ArrayIndexOutOfBoundsException。

结合你给出的奇数长度测试场景举例验证:假设传入长度为3的数组,最大合法下标为2,i的遍历序列为1、3:

  • 当i=1时符合i<3的条件,i+1=2访问合法
  • 当i自增到3时才会退出循环,但如果中间出现步长异常(比如你尝试在循环体中额外递增i),就会让i提前到达2,触发i+1=3的越界问题。

修复方案

直接调整for循环的终止条件,确保i+1也在合法下标范围内即可,修改后代码如下:

for (int i = 1; i + 1 < iValues.length; i = i + 2) {
    g.addEdge(iValues[0], iValues[i], iValues[i + 1]);
}

其他注意事项

  • 不要在循环体内部额外对i进行递增,会打乱原本设定的步长逻辑,反而更容易触发下标异常
  • 若你的业务逻辑要求每次取两个相邻元素作为参数,该修改后的逻辑兼容奇数、偶数长度的数组,且会正常终止,不会出现死循环问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:24:08