2014-01-08 103 views
-1

有人能告訴我下面的代碼有什麼問題嗎?當我試運行後的第一行代碼如下{產生以下錯誤:使用ArrayList的哈希映射

「java.lang.IndexOutOfBoundsException:指數:0,大小:0」

public static class ASIFFile { 
      private ArrayList<HashMap<String,String>> data; 
      private static int currRec = 0; //assign each record a numeric id based on this figure. 

      // Method for reading ADIFfile 
      public ArrayList<HashMap<String,String>> ReadASIFfile (File DataFile) {  
       data = new ArrayList<HashMap<String, String>>(500); 

       try { 
         HashMap<String, String> temp = new HashMap<String,String>(10); 
         data.set(currRec, temp);       
         (data.get(currRec)).put("recID", Integer.toString(currRec));//give the record a numeric ID 


... 
+1

第二行吠叫了分號:) – Eich

+0

@Eich啊,這是一個錯誤的複製到文本框。它實際上在代碼 – Adam

回答

2

正如凱文提到的,你從來沒有在你的ArrayList中放入任何東西。你的代碼應該是這個樣子......

data = new ArrayList<HashMap<String, String>>(500); 

try { 
    //give the record a numeric ID 
    data.add(currRec, temp); 

在以前的解決方案,你調用在data.set(currRec,溫度);它假定ArrayList的位置currRec中有一個HashMap元素。如果你還沒有在ArrayList中放入任何東西,那麼就不會有currRec元素。

+0

感謝您的幫助,問題是我在做data.set而不是data.add! – Adam

6

你永遠不添加任何東西到您的ArrayList。你有一個ArrayList可以持有HashMaps,但目前empty.You有一個新的HashMap添加到您想要使用該索引之前使用索引。

+0

中,我將它改爲'HashMap temp = new HashMap (10); \t \t \t \t \t在data.set(currRec,溫度); \t \t \t(data.get(currRec))把( 「recID」,Integer.toString(currRec));'但是我仍然有問題。你有什麼其他的建議? – Adam

+0

@Adam,你可以以[SSCCE](http://sscce.org)的形式發佈你的代碼嗎? –