ArrayIndexOutOfBoundsException
问题描述:
我想创建一个有序数组来研究复杂性。我知道这是一个非常基本的代码。我收到一个错误说......ArrayIndexOutOfBoundsException
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at myWork.orderedArray.<init>(orderedArray.java:20)
at myWork.mainClass.main(mainClass.java:6)
我的代码是
package myWork;
public class orderedArray {
int j;
int arr[]=new int[10];
orderedArray(int n){
for(int i=0;i<arr.length;i++){
arr[i]=0;
}
for(int i=0;i<arr.length;i++){
if(arr[i]<=n){
for(int j=arr.length;j>i+1;j--){
arr[j]=arr[j-1];
}
arr[i]=n;
}
}
}
void dispaly(){
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
,我在主类中创建一个对象,刚刚运行的主类,我认为它不相关的错误
package myWork;
public class mainClass {
public static void main(String[] args) {
orderedArray obj1= new orderedArray(5);
}
}
感谢您的阅读时间。请接受我的apoligies,如果你在我的英语中发现了一些小错误,并且我在这个问题中提出了代码的方式(第一次在*中,所以我不知道如何正确地输入代码:D)
答
On the第一次迭代:
for(int j=arr.length;j>i+1;j--){
arr[j]=arr[j-1];
}
您将访问arr[arr.length]
这是出界。您需要从arr.length - 1
开始循环,以确保您永远不会访问无效循环。
答
数组索引始终始于零0. 例如, int a[]=new int[10];
意思是第一个索引是[0]最后一个索引是[9]而不是[10]。 由于从0到9有10个存储单元,称为数组长度。
例如通过调用一个索引超出范围的[10]将引发ArrayoutofboundsException
。
在你的代码是在这些线路
for(int j=arr.length;j>i+1;j--){
arr[j]=arr[j-1];
}
变化arr.length
到(arr.length-1)
摆脱异常做着错误。
希望这有助于:)