为了账号安全,请及时绑定邮箱和手机立即绑定

是什么导致java.lang.ArrayIndexOutOfBoundsException

是什么导致java.lang.ArrayIndexOutOfBoundsException

慕尼黑的夜晚无繁华 2019-05-20 15:51:16
什么ArrayIndexOutOfBoundsException意思,我该如何摆脱它?以下是触发异常的代码示例:String[] name = { "tom", "dick", "harry" };for (int i = 0; i <= name.length; i++) {     System.out.println(name[i]);}
查看完整描述

3 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您的第一个停靠点应该是合理清楚地解释它的文档

抛出以指示已使用非法索引访问数组。索引为负数或大于或等于数组的大小。

例如:

int[] array = new int[5];int boom = array[10]; // Throws the exception

至于如何避免......嗯,不要这样做。小心你的数组索引。

人们有时遇到的一个问题是认为数组是1索引的,例如

int[] array = new int[5];// ... populate the array here ...for (int index = 1; index <= array.length; index++){
    System.out.println(array[index]);}

这将错过第一个元素(索引0)并在索引为5时抛出异常。此处的有效索引为0-4(含)。这里正确的惯用语for是:

for (int index = 0; index < array.length; index++)

(当然,假设您需要索引。如果您可以使用增强型for循环,请执行此操作。)


查看完整回答
反对 回复 2019-05-20
?
波斯汪

TA贡献1811条经验 获得超4个赞

if (index < 0 || index >= array.length) {
    // Don't use this index. This is out of bounds (borders, limits, whatever).} else {
    // Yes, you can safely use this index. The index is present in the array.
    Object element = array[index];}

也可以看看:


更新:根据您的代码段,

for (int i = 0; i<=name.length; i++) {

索引包含数组的长度。这是出界的。您需要替换<=<

for (int i = 0; i < name.length; i++) {


查看完整回答
反对 回复 2019-05-20
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

简而言之:

在最后一次迭代中

for (int i = 0; i <= name.length; i++) {

i将等于name.length哪个是非法索引,因为数组索引是从零开始的。

你的代码应该阅读

for (int i = 0; i < name.length; i++)


查看完整回答
反对 回复 2019-05-20
  • 3 回答
  • 0 关注
  • 6853 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信