2014-10-30 56 views
-2

我想創建一個有序數組來研究複雜性。我知道這是一個非常基本的代碼。我收到一個錯誤說......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,如果你在我的英語中發現了一些小錯誤,並且我在這個問題中提出了代碼的方式(第一次在stackoverflow中,所以我不知道如何正確地輸入代碼:D)

回答

1

On the第一次迭代:

for(int j=arr.length;j>i+1;j--){ 

    arr[j]=arr[j-1]; 

} 

您將訪問arr[arr.length]這是出界。您需要從arr.length - 1開始循環,以確保您永遠不會訪問無效循環。

0

數組索引始終始於零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)擺脫異常做着錯誤。
希望這有助於:)