2015-05-23 114 views
2

好的,這是我的問題。我正在學習使用泛型類和方法。我想創建一個通用數組列表和方法,通過選擇索引來添加/刪除元素。我根本不知道該怎麼做。我的例子是調用IndexOutOfBoundsException。通用數組索引越界

任何幫助,歡迎。 感謝它的推進。

類klasa3:

public class klasa3<E> { 
    private java.util.ArrayList<E> list = new java.util.ArrayList<>(); 



    public klasa3(int initSize){ 

    } 


    public int getSize() { 
     return list.size(); 
    } 

    public E peek() { 
     return list.get(getSize() - 1); 
    } 

    public void push(E o,int indeks) { 
     o = list.get(indeks); 
     list.add(o); 
    } 

    public E pop(int indeks) { 
     E o = list.get(indeks); 
     list.remove(indeks); 
     return o; 
    } 

    public boolean isEmpty() { 
     return list.isEmpty(); 
    } 

    @Override 
    public String toString() { 
      return "stack: " + list.toString(); 
    } 
} 

主類:

public class klasa2 { 
    public static void main(String[] args) { 


     klasa3 stak2 = new klasa3(13); 
     stak2.push("cola",2); // problem here 
     stak2.pop(2); 
     System.out.println(stak2.getSize()); 

    } 


} 

回答

2

你創建一個空ArrayList,然後試圖內從它那裏得到的第三個元素(索引2元)的push方法。這是行不通的。

現在,您目前在構造函數中忽略了initSize參數。你可能想是這樣的:

// TODO: Rename the class to follow naming conventions 
public klasa3(int initSize) { 
    for (int i = 0; i < initSize; i++) { 
     list.add(null); 
    } 
} 

,或者提供一個默認的元素:

// TODO: Rename the class to follow naming conventions 
public klasa3(int initSize, E element) { 
    for (int i = 0; i < initSize; i++) { 
     list.add(element); 
    } 
} 
+0

非常感謝,+1,它像一個魅力。你是一個巫師! –

+0

@ViktorLekić接受答案,如果它幫助你。因爲在Stackoverflow中接受答案會讓人們知道問題已經解決。 – TSKSwamy

0

這是正在發生的事情:

main方法首先要創建一個新的klasa3對象。然後你打電話給push("cola", 2)

push方法確實:o = list.get(indeks),其中indeks2。此時該列表爲空,因此2不是有效的索引,這會導致IndexOutOfBoundsException

您傳遞給get方法的索引必須介於0(包含)和列表大小(不包括)之間。由於尺寸爲0,因此索引2無效。

+0

是的,我的不好。現在工作正常。感謝您回覆哥們。 –