根本原因是访问了不存在的索引位置,解决关键是提前预防而非捕获异常;常见错误是循环终止条件错误,如将 i
遍历数组时发生下标越界异常(如 Java 的
ArrayIndexOutOfBoundsException或 Python 的IndexError),根本原因是访问了不存在的索引位置,比如用i = 5去取长度为 5 的数组的第 6 个元素(索引从 0 开始,合法范围是 0~4)。解决的关键不是“捕获异常”,而是**提前预防**——确保循环变量始终落在有效范围内。检查循环边界条件是否写错
最常见的原因是循环终止条件错误。例如在 Java 或 C 中写成:
for (int i = 0; i
数组索引最大是
length - 1,用就会多跑一次。类似错误还有:
- 起始索引设为 1 却忘了调整终止条件(如遍历却跳过首元素又越界)
- 倒序遍历时写成
i >= 0却在循环体内先用arr[i]再i--,导致最后一次访问arr[-1]- 嵌套循环中混淆了内外层数组长度(比如用外层长度控制内层索引)
用增强 for 循环(for-each)避免手动索引
如果不需要索引本身,只遍历元素,优先使用不暴露下标的语法:
- Java:
for (String s : stringArray) { ... }- Python:
for item in my_list:- JavaScript:
for (const item of arr)或arr.forEach(...)这类写法由语言底层保证不越界,彻底规避索引计算错误。
访问前主动校验索引有效性
当必须用下标(比如需要修改特定位置、做相邻元素比较),应在使用前判断:
- Java:
if (i >= 0 && i- Python:
if 0- 尤其适用于动态计算索引的场景,比如
i + 1取后一个元素时,要检查i + 1调试时打印关键信息快速定位
如果异常已发生,别急着改代码,先确认问题现场:
- 打印数组长度和当前索引值(如
System.out.println("len=" + arr.length + ", i=" + i);)- 检查数组是否为空(长度为 0 时任何非负索引都越界)
- 确认数组是否被意外重新赋值或截断(尤其在多线程或函数传参后)











