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)摆脱异常做着错误。
希望这有助于:)