ArrayIndexOutOfBoundsException是什么意思,我如何摆脱它?
下面是一个触发异常的代码示例:
String[] names = { "tom", "bob", "harry" };
for (int i = 0; i <= names.length; i++) {
System.out.println(names[i]);
}
ArrayIndexOutOfBoundsException是什么意思,我如何摆脱它?
下面是一个触发异常的代码示例:
String[] names = { "tom", "bob", "harry" };
for (int i = 0; i <= names.length; i++) {
System.out.println(names[i]);
}
当前回答
这就是在Eclipse中抛出这种类型的异常时的样子。红色的数字表示您试图访问的索引。所以代码看起来是这样的:
myArray[5]
当您试图访问该数组中不存在的索引时,将引发此错误。如果一个数组的长度是3,
int[] intArray = new int[3];
那么唯一有效的索引是:
intArray[0]
intArray[1]
intArray[2]
如果一个数组的长度为1,
int[] intArray = new int[1];
那么唯一有效的索引是:
intArray[0]
任何等于数组长度或大于数组长度的整数都是越界的。
任何小于0的整数:都是越界的;
附注:如果您希望更好地理解数组并做一些实际练习,这里有一个视频:Java中的数组教程
其他回答
由于i<=name,你会得到ArrayIndexOutOfBoundsException。长度的部分。的名字。Length返回字符串名称的长度,即3。因此,当您试图访问名称[3]时,它是非法的,并抛出异常。
解决代码:
String[] name = {"tom", "dick", "harry"};
for(int i = 0; i < name.length; i++) { //use < insteadof <=
System.out.print(name[i] +'\n');
}
它在Java语言规范中定义:
公共final字段长度,它包含组件的数量 数组的。长度可以为正或零。
数组中的每一项都称为一个元素,每个元素都通过它的数值索引来访问。如上图所示,编号从0开始。例如,第9个元素将因此在索引8处被访问。
抛出IndexOutOfBoundsException表示某种类型的索引(例如数组、字符串或向量)超出了范围。
任意数组X,可以从[0到(X.length - 1)]访问
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];
}
参见:
Java教程-语言基础-数组
更新:根据您的代码片段,
for (int i = 0; i<=name.length; i++) {
索引包含数组的长度。这是越界的。你需要用<替换<=。
for (int i = 0; i < name.length; i++) {
如果您使用数组的长度来控制for循环的迭代,请始终记住数组中第一项的索引为0。所以数组中最后一个元素的下标比数组的长度小1。
对于任何长度为n的数组,数组元素的索引将从0到n-1。
如果您的程序试图访问数组索引大于n-1的任何元素(或内存),则Java将抛出ArrayIndexOutOfBoundsException
这里有两种我们可以在程序中使用的解决方案
保持数: For (int count = 0;计数< array.length;计数+ +){ System.out.println(阵列[数]); } 或者其他循环语句 Int count = 0; While (count < array.length) { System.out.println(阵列[数]); 数+ +; } 一个更好的方法是使用for循环,在这种方法中,程序员不需要担心数组中元素的数量。 for(String str: array) { System.out.println (str); }