2016-12-30 55 views
-2

我在Java中有以下代碼。java中的ArrayOutOfBoundsException

public class TestArray 
{ 
    public static void main(String s[]) 
    { 

     int arr[]={23,12,1,4,1,4,23,6}; 
     int temp=arr[0]; 

     for(int i=0;i<arr.length;i++) 
     { 
      for(int j=0;j<arr.length;j++) 
      { 
       if(arr[i]>arr[j+1]) 
       { 
        temp=arr[j+1]; 
        arr[j+1]=arr[i]; 
        arr[i]=temp; 
       } 
       if(arr[i]==arr[j+1]) 
       { 
        arr[j+1]=arr[j+2]; 
       } 
      } 
     } 

     for(int i=0;i<arr.length;i++) 
     { 
      System.out.println(arr[i]); 
     } 
    } 
} 

但這代碼拋出

異常在線程 「主」 java.lang.ArrayIndexOutOfBoundsException:8 在com.test.java.TestArray.main(TestArray.java:16)

任何人都可以幫助我嗎?

+0

問題將在這裏出現'j + 2' –

+0

該例程的目的是什麼?你想達到什麼目的?你想實現一個數組排序? –

回答

0

jarr.length - 1時,嘗試索引arr[j + 1]arr[j + 2]將失敗。

你是否應該將索引運行到比目前少一個?此外,您索引j + 2的最終蓬勃發展看起來沒有必要。

作爲一個風格點,請儘量保持temp的範圍。交換兩個數組元素時只需要它。

0

看起來像你試圖按降序對數組進行排序。你可以試試這個:

public class TestArray 
{ 
    public static void main(String s[]) 
    { 

     int arr[]={23,12,1,4,1,4,23,6}; 
     int n = arr.length; 
     int temp = 0; 
     for(int i=0; i < n; i++){ 
      for(int j=1; j < (n-i); j++){ 
       if(arr[j-1] < arr[j]){ 
        //swap elements 
        temp = arr[j-1]; 
        arr[j-1] = arr[j]; 
        arr[j] = temp; 
       }   
      } 
     } 
     for(int i=0;i<arr.length;i++) 
     { 
      System.out.println(arr[i]); 
     } 
    } 
} 

你可以理解代碼。 如果你想知道你是怎麼例外,通過Bathsheba

0

參考答案修改你的代碼

for(int i=0;i<arr.length-1;i++) { 
    for(int j=i;j<arr.length-1;j++) { 
     if(arr[i]>arr[j+1]) { 
      temp=arr[j+1]; 
      arr[j+1]=arr[i]; 
      arr[i]=temp; 
     } 
     if(arr[i]==arr[j+1]) { 
      arr[j+1]=arr[j+2]; 
     } 
    } 
} 

在你的循環中,j的值將是從0到7,而您試圖訪問陣列的第j + 1個位置。所以當j的值爲7時,你正在訪問一個[8],它不在數組大小的範圍內。大小爲8的數組將具有從0到7的索引值。

相關問題