2013-02-07 136 views
-2

我在下面的代碼(更大的程序的一部分 - 在調用「添加」的行中引發異常)得到空指針異常。數組列表空指針異常

public class A 
{ 
    static ArrayList<Integer> sets[]; 
    public static void main(String[] args) 
    { 
     sets = new ArrayList[5]; 
     sets[0].add(1); 
    } 
} 

我也不明白爲什麼編譯器要求我使任何類級變量靜態(例如ArrayList)。據我所知,這些東西不應該處於靜態環境中(在編碼實踐中,而不是編譯器問題),而編譯器則需要它。

在此先感謝。

回答

3
sets = new ArrayList[5]; 

只需填寫5點與null

你需要明確設定ArrayList()每個位置做add()調用之前。

實施例:

sets[0] = new ArrayList<Integer>(); 
sets[0].add(5); 
0

這是因爲你的數組是用null值初始化的。

//it will initialize sets variable 
sets = new ArrayList[5]; 
//but set[0], set[1]... and on are null 

你應該使用它們

sets[0] = new ArrayList<Integer>(); 
sets[0].add(1); 

此外,爲了更好地設計之前初始化數組項,以及,你應該計劃面向接口而不是類。有關更多信息,請參閱What does it mean to "program to an interface"?

總之,你的代碼應該看起來像

public class A { 
    static List<Integer> sets[]; 
    public static void main(String[] args) { 
     sets = new List[5]; 
     sets[0] = new ArrayList<Integer>(); 
     sets[0].add(1); 
     //extending your code in order to use more than one value of the List array 
     sets[1] = new ArrayList<Integer>(); 
     sets[1].add(20); 
     for(List<Integer> list : sets) { 
      if (list != null) { 
       System.out.println(list.get(0)); 
      } 
     } 
    } 
} 
1

sets = new ArrayList[5]; 

分配數組,但不將一個ArrayList在陣列的任何元素。

您需要

sets[0] = new ArrayList<Integer>(); 
sets[0].add(1);