2013-05-02 56 views
-1

我正在研究從文件獲取輸入並將信息存儲在數組中的程序。然後,有5種添加,刪除,打印信息等方法。我還創建了嵌入式GUI類。每種方法都有一個按鈕。ArrayIndexOutOfBoundsException/GUI

問題是,當我從文件中讀取信息時,「addEntry」方法正常工作,但是當我嘗試向數組中單獨添加信息時,它會給出一個「ArrayIndexOutOfBoundsException」。這隻發生在GUI中。如果我只是簡單地調用主類中的方法,它就可以正常工作。這是我的添加方法:

public void addEntry(String sur, String init, String telEx) { 
    currentPlace++; 

    setSurname(sur); 
    setInitial(init); 
    setTelExt(telEx); 

    array[currentPlace] = (new Entry(getSurname(), getInitial(), getTelExt())); 
} 

變量currentPlace只是一個字段,其中存儲了數組中最後一個元素的位置。 Entry是一個類,它包含兩個構造函數(默認值和一個具有3個字段的值)和get/set方法。此外,如果我將currentPlace減1,它會起作用,但我失去了陣列的最後一個元素。

+1

這是什麼編程語言? – JJJ 2013-05-02 17:42:32

+1

對不起,這是Java。 – user2344158 2013-05-02 17:44:06

+0

您是否在將'Entry'對象添加到數組之前通過打印來檢查'currentPlace'的值? – 2013-05-02 17:54:27

回答

1

您在數組中分配的項目不足。 errormessage是一個非常明顯的提示IMO。

Object[] o = new Object[2]; 
o[2] = x; <-- Index out of bounds 
+1

但我的數組的大小是100,我在23 ... – user2344158 2013-05-02 17:50:19

+1

OOps!我意外地提出了以前的評論。 :(好的,展示代碼來證明它是否在構造函數或構造函數本身中調用的函數內調用數組?爲什麼使用數組而不是List <>例如? – Devolus 2013-05-02 18:01:08

0

這是從來沒有盲目的東西對象到一個數組,而不必(在你的代碼currentPlace)某種對數組索引檢查的一個好主意,以確保你不分配對象過去的數組的末尾就像上面的@Devolus所示。

這裏的一個重要教訓是數組是一個容器,它容納了一個固定的元素數。如果您的程序需要大小的容器,那麼您不應該使用數組,而應該使用Collections類之一,如ArrayListVector,這些數字在添加項目時會自動增加。

+0

謝謝,但規範在此階段需要一個數組,因爲數據庫被下一個任務中的列表替換。 – user2344158 2013-05-02 18:00:50

0

使用debugger來查看變量如何變化。把breakpoint到該行:

array[currentPlace] = (new Entry(getSurname(), getInitial(), getTelExt())); 

或。無論您在調用此方法,看看currentPlace變化。