2016-02-23 29 views
1

我已經聲明瞭一個名爲Member的類。然後我分配了一個帶有成員類型的數組。當我試圖把東西放到陣列,它給了我這個錯誤:如何使用另一個類類型的數組?

Exception in thread "main" java.lang.NullPointerException 
    at HW2_2.main(HW2_2.java:15) 

這是我的代碼:

import c.Member; 

import java.util.Scanner; 
public class HW2_2 
{ 
    public static void main(String []args) 
    { 
     Member[] p = new Member[100]; 
     Scanner in = new Scanner(System.in); 
     p[0].setID("apple12"); 
     p[0].setPassword("1234"); 
     p[0].setFirstname("fname"); 
     p[0].setLastname("lname"); 
     p[0].setEmail("*@gmail.com"); 
    } 
} 

我該如何解決這個問題的地方,我可以將數據存儲到一點上我陣列?

回答

2

您已創建一個對象p,該對象指向Member對象的數組。太棒了。但是,陣列中的每個對象默認爲null。你不能簡單地對它們執行操作。

你可能想這樣做......

//... 
p[0] = new Member(...); 
p[0].setId("ID"); 
//... And so on 

什麼是重要的,從這裏學習是一個數組聲明語法不初始化數組本身的價值。那是不可能的,對吧?你會如何分別向每個構造者傳遞參數?你必須手動完成。

0

當您:

Member[] p = new Member[100]; 

它初始化所有陣列成員爲空(由於這是對象類型的陣列)。

你需要的,如果你想他們是可用於初始化成員,所以在這裏你必須:

p[0] = new Member(); 

,然後才能使用該成員。


如果你想在初始化一次全體成員,需要遍歷數組中的所有元素,並創建一個每個成員;與Java 8這是可以做到這樣:

IntStream.range(0, p.length).forEach(index -> p[index] = new Member()); 

奇怪的是,有作爲Arrays<T> void fill(T[] array, Supplier<T> supplier)沒有這樣的方法。

相關問題