在迭代数组的所有元素时ArrayIndexOutOfBoundsException
如何处理这个exception“ArrayIndexOutOfBoundsException”我的代码:我创build一个64长度的数组,然后我初始化每个索引,然后我打印索引,以确保我充满所有索引,但它打印到63然后给出exception! 任何想法
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); } }
Java中的数组索引从0
开始,并转到array.length - 1
。 所以把循环改为for(int i=0;i<a.length;i++)
索引从0开始,所以最后索引是63.像这样改变你的循环:
for(int i=0;i<a.length;i++){
查看JLS数组 :
如果一个数组有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]); }
需要完整的解释? 读这个
数组的索引总是从0
开始。 因此,当你在数组中有64个元素时,它们的索引将会从0 to 63
。 如果你想访问第64个元素,那么你必须通过a[63]
。
现在,如果我们看看你的代码,那么你写的条件是for(int i=1;i<=a.length;i++)
这里a.length
将返回数组的实际长度为64。
这里发生了两件事情:
- 当你从1开始索引,即
i=1
因此你跳过了你的数组的第一个元素,它将在第0th
索引处。 - 在最后它试图访问
a[64]
元素,这将成为数组的65th
元素。 但是你的数组只包含64个元素。 因此你得到ArrayIndexOutOfBoundsException
。
使用for循环迭代数组的正确方法是:
for(int i=0;i < a.length;i++)
索引从0开始,到< array.length
。
在Java数组中,总是从索引0开始。所以如果你希望数组的最后一个索引是64,那么数组的大小必须是64 + 1 = 65。
// start length int[] myArray = new int [1 + 64 ];
你可以这样纠正你的程序:
int i = 0; // Notice it starts from 0 while (i < a.length) { a[i]=i; System.out.println(i++); }
你做错了你的math。 数组从0开始计数。例如int [] d = new int [2]是一个数组为0和1的数组。
你必须设置你的整数“i”为0而不是1,这样才能正常工作。 因为你从1开始,你的for循环计数超过数组的限制,并给你一个ArrayIndexOutOfBoundsException。