2013-12-09 237 views
0

你好,我是新手編程,我目前的任務是創建一個有關排序的程序。我不斷收到錯誤排序問題..

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 
     at sorting.Sorting.main(Sorting.java:17) 
Java Result: 1 

它告訴錯誤所在行17載的線路:

if (ArrayOfInts[j] > ArrayOfInts[j + 1]) 

請幫助..繼承人的整個事情。

public class Sorting{ 
    public static void main(String[] args){ 
     int[] ArrayOfInts = {42, 97, 3, 689, 14, 1076, 3000, 8, 632, 327, 976, 4215}; 
     for(int i = ArrayOfInts.length; i >= 1; i--){ 
      for(int j = 0; j < i; j--){ 
      if (ArrayOfInts[j] > ArrayOfInts[j + 1]){ 
       int temp = ArrayOfInts[j]; 
       ArrayOfInts[j] = ArrayOfInts[j + 1]; 
       ArrayOfInts[j - 1] = temp; 

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

那麼信息本身就表明你的邏輯'j + 1'導致數組超出界限。索引從0開始到length - 1。 –

回答

2

j=0,這條線是有問題的:

ArrayOfInts[j - 1] = temp; 

爲您嘗試訪問-1指數在數組中。

2
for(int i = ArrayOfInts.length; i >= 1; i--) 

您好請替換上面的代碼行下面一行

for(int i = ArrayOfInts.length-1; i >= 0; i--) 
0

我很少進行校正的代碼:
1.第一for循環中,而不是INT I = ArrayOfInts.length,使用int i = ArrayOfInts.length-1,這是有用的,長度將返回數組中的元素數量,並且數組爲零索引,因此在您的情況下長度將爲12即0到11.
2.對於2nd for循環,而不是j-使用j ++,因爲j從0開始到i。
3.代替ArrayOfInts [j - 1] = temp;使用ArrayOfInts [j + 1] = temp;

public static void main(String[] args) 
    { 
     int[] ArrayOfInts = {42, 97, 3, 689, 14, 1076, 3000, 8, 632, 327, 976, 4215}; 
     for(int i = ArrayOfInts.length-1; i >= 1; i--) 
     { 
      for(int j = 0; j < i; j++) 
      { 
       if (ArrayOfInts[j] > ArrayOfInts[j + 1]) 
       { 
        int temp = ArrayOfInts[j]; 
        ArrayOfInts[j] = ArrayOfInts[j + 1]; 
        ArrayOfInts[j + 1] = temp; 

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