2011-05-11 86 views
0

我試圖運行一個程序,如果一切順利,能夠花一年時間並返回當年發佈的專輯的標題。我已經給了它6張專輯,現在我正在試圖打印一個標題。我修復了一些令人沮喪的錯誤,但這是我以前從未見過的錯誤。錯誤出現在第21行,但我不確定它的含義。誰能幫忙?「線程中的異常」main「java.lang.NullPointerException」

package songselector; 

import java.util.Scanner; 

public class Main { 
    public class Album 
    { 
int year; String title; 
public Album() { 
this.year = 0; this.title = null; 
     } 
public Album (int year, String title) { 
this.year = year; this.title = title; 
    } 
    } 

    class CAKE { 
Album[] albums; 
public CAKE() { 
albums = new Album[6]; 
albums[0].year = 1994; albums[0].title = "Motorcade Of Generosity"; 
albums[1].year = 1996; albums[1].title = "Fashion Nugget"; 
albums[2].year = 1998; albums[2].title = "Prolonging The Magic"; 
albums[3].year = 2001; albums[3].title = "Comfort Eagle"; 
albums[4].year = 2004; albums[4].title = "Pressure Chief"; 
albums[5].year = 2011; albums[5].title = "Showroom of Compassion"; 
    } 

public void printAlbum (int y) { 
System.out.println (albums[y].title); 
    } 

    } 

    public static void main(String[] args) { 
     new Main().new CAKE().printAlbum (0); 
    } 
} 

回答

3

這意味着你正在嘗試訪問/調用一個null對象的方法。就你而言,你初始化了一系列相冊,但沒有初始化數組中的每個相冊。

您需要在陣列中初始化每個相冊:

albums = new Album[6]; 
albums[0] = new Album(); 
albums[0].year = 1994; 
albums[0].title = "Motorcade Of Generosity"; 
... 

或者也可以簡單(如@entonio指出):

albums = new Album[6]; 
albums[0] = new Album(1994, "Motorcade Of Generosity"); 
albums[1] = new Album(1996, "Fashion Nugget"); 
... 

既然你有一個適當的構造函數。

還有一件事:不要在每行中調用多個方法,它會幫助您調試。

+0

它是'專輯[0]',並且使用他的ctor它可以是'albums [0] =新專輯(1994,「Motorcade Of Generosity」);' – entonio 2011-05-11 00:53:43

+0

oops ...將編輯。謝謝! – MByD 2011-05-11 00:54:49

+0

啊,好吧。謝謝你,這很有道理。現在運行良好。 – James 2011-05-11 01:00:52

1

當您分配一個對象數組時,它將填充空值。您需要創建對象來填充它們。您的albums[0]未創建,因此嘗試訪問其year字段(即使寫入)會導致NPE。

+0

+1 - 感謝您修理我。 – MByD 2011-05-11 00:57:26

+0

謝謝,我會提出一個編輯,但我仍然不太清楚SO的工作原理。我只是指出了失蹤者,因爲我確實認爲OP可能會感到困惑。我非常尊重你們在這裏用實際的代碼寫出適當的徹底回覆,我對格式不太好,所以有時我只是試圖解釋我認爲OP需要知道什麼才能解決問題。 – entonio 2011-05-11 01:05:00

相關問題