2016-01-23 38 views
0

我正在嘗試使用arraylist進行插入排序程序,但我在其中的某些內容上發生錯誤。ArrayList InsertionSort問題

每當我試着運行我的程序,它說:

異常線程 「main」 java.lang.IndexOutOfBoundsException:指數: 5,大小:5在java.util.ArrayList.rangeCheck(ArrayList的的.java:635)在 java.util.ArrayList.get(ArrayList.java:411)在 NewInsertionSort.main(NewInsertionSort.java:20)

但我不明白的地方我打電話這是「超出界限」。

其次,它說的是從來沒有使用過我的本地變量「K」的價值,但它應該是...

如果有人能幫助我,那將是巨大的,謝謝你的支持。

這是我的代碼:

import java.util.ArrayList; 


public class NewInsertionSort { 

    public static void main(String[] args) { 

     ArrayList <Integer> InsertionSort = new ArrayList <Integer>(); 
     InsertionSort.add(1); 
     InsertionSort.add(52); 
     InsertionSort.add(21); 
     InsertionSort.add(45); 
     InsertionSort.add(27); 


     Integer a; 
     Integer lock; 
     Integer c; 
     for (c = 1; c < InsertionSort.size(); c++);{ 
      lock = InsertionSort.get(c); 
      System.out.println(lock); 


      for (a = c - 1; (a >= 0) && (InsertionSort.get(a) < lock); a--){ 
       Integer k = InsertionSort.get(a+1); 
       Integer h = InsertionSort.get(a); 

       k = h; 
      } 
      lock = InsertionSort.get(a+1); 

     } 

     for(int z=0;z < InsertionSort.size(); z++){ 
      System.out.println(InsertionSort.get(z)); 
     } 


    } 

} 

回答

0

List爲從零開始的數據結構(被鏈接的Javadoc說部分,它將拋出一個IndexOutOfBoundsException如果索引超出範圍(索引< 0 ||指數> = size()))。這意味着有效索引是0n - 1(其中nsize)。

for (c = 1; c < InsertionSort.size(); c++) { 
    lock = InsertionSort.get(c - 1); 

for (c = 0; c < InsertionSort.size(); c++) { 
    lock = InsertionSort.get(c); 

另外,按照慣例,變量名以小寫字母。所以InsertionSort應該是insertionSort(或者只是insertionList)。最後,您可以使用鑽石經營者在Java中7+ 則應通過編程的List接口。喜歡的東西,

List<Integer> insertionList = new ArrayList<>(); 
3
for (c = 1; c < InsertionSort.size(); c++) --> ; <-- { 
      lock = InsertionSort.get(c); 
      System.out.println(lock); 

問題是,你有一個 ';'在for循環的結尾'''後面。這也是它告訴你變量k沒有被使用的原因。

更新基於評論:

get方法下的 'A' 位置只返回值。所以你的'k'和'h'變量只是數字。他們沒有指向任何地方。如果你想要的值賦給「a」到的值「a + 1」你要做的:

insertionSort.set(a+1, h); 
+0

謝謝,我不知道我怎麼沒看出來,但它仍然說ķISN」用過嗎? –

+0

是啊,因爲沒有使用k。您將h的值賦予變量k,但是......之後不使用它。所以這是毫無意義的。我甚至不明白你爲什麼分配給k然後分配給h,然後你把h分配給k ...你可以刪除h變量並分配InsertionSort.get(a);直接給k。但即使如此,你必須在代碼中的某個地方使用它。 – Natrezim

+0

我試圖把a的值賦給a + 1的值,所以我得到這兩個值並且用它們作變量,然後設置這些變量相等。 –