迭代遍历数组的所有元素时出现ArrayIndexOutOfBoundsException

时间:2010-12-12 08:15:43

标签: java arrays

如何处理此异常“ArrayIndexOutOfBoundsException” 我的代码:我创建一个64长度的数组然后我初始化每个索引然后我打印索引,以确保我正在填充所有索引,但它打印到63然后给出异常!任何想法

    public static void main(String [] arg) {
    int [] a=new int [64];
    for(int i=1;i<=a.length;i++){
        a[i]=i;
        System.out.println(i);
    }

}

7 个答案:

答案 0 :(得分:15)

Java中的数组索引从0开始,然后转到array.length - 1。因此,将循环更改为for(int i=0;i<a.length;i++)

答案 1 :(得分:3)

索引从0开始,因此最后一个索引是63.更改你的for循环如下:
for(int i=0;i<a.length;i++){

答案 2 :(得分:3)

请参阅JLS-Arrays

  

如果是数组   有n个组件,我们说n是   阵列的长度;的组成部分   使用整数引用数组   指数从0到n - 1,包括在内。

所以你必须遍历[0,length()-1]

for(int i=0;i<a.length;i++) {
    a[i]=i+1;  //add +1, because you want the content to be 1..64
    System.out.println(a[i]);

}

答案 3 :(得分:1)

需要完整解释吗?阅读本文

数组的索引始终从0开始。因此,当您在数组中有64个元素时,它们的索引将来自0 to 63。如果要访问第64个元素,则必须按a[63]进行操作。

现在,如果我们查看您的代码,那么您已将条件写为for(int i=1;i<=a.length;i++)此处a.length将返回数组的实际长度(64)。

发生了两件事

  1. 当您从1开始索引时,即i=1,因此您正在跳过数组的第一个元素,它将位于0th索引处。
  2. 最后,它试图访问a[64]元素,该元素将成为数组的65th元素。但是你的数组只包含64个元素。因此,您得到ArrayIndexOutOfBoundsException
  3. 使用for循环迭代数组的正确方法是:

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

    索引从0开始,然后转到< array.length

答案 4 :(得分:0)

在Java数组中,始终从索引0开始。因此,如果您希望数组的最后一个索引为64,则该数组的大小必须为64 + 1 = 65。

//                       start   length
int[] myArray = new int [1    +  64    ];

答案 5 :(得分:0)

您可以通过以下方式更正您的计划:

int i = 0;     // Notice it starts from 0
while (i < a.length) {
    a[i]=i;
    System.out.println(i++);
}

答案 6 :(得分:0)

你的数学错了。数组从0开始计数。 int [] d = new int [2]是一个计数为0和1的数组。

您必须设置整数&#39; i&#39;为了正常工作,值为0而不是1。因为从1开始,你的for循环计数超过数组的限制,并给你一个ArrayIndexOutOfBoundsException。