2014-12-06 124 views
0

我工作的一類決賽。它應該是一個「媒體庫」,用於存儲關於人物媒體(DVD,遊戲等)的信息,以及它應該在新媒體項目中採用的其他信息,將它們存儲到陣列中並在提示時顯示它們。它可以完成所有這些操作,但是當它顯示它時,即使它正在執行它,它也會在getter上產生一個NullPointerException。NullPointerException異常的吸

public class MediaItem { 
private String title; 
private String format; 
private boolean onLoan; 
private String loanedTo; 
private String dateLoaned; 

public MediaItem(){ 
    title = null; 
    format = null; 
    onLoan = false; 
    loanedTo = null; 
    dateLoaned = null; 

} 

public MediaItem(String title, String format){ 
    this.title = title; 
    this.format = format; 
    onLoan = false; 

} 

以上是爲使「MediaItems」因爲我們被告知要叫他們

下面的類中的字段和構造函數,另一個類的部分,即庫本身。一個用於存儲媒體項目的陣列,另一個用於打印列表。還有add方法以及我如何將它們添加到數組中。

private MediaItem[] items = new MediaItem[100]; 
private String[] listOfItems = new String[100]; 
private int numberOfItems = 0; 

public void addNewItem(String title, String format){ 
    MediaItem item = new MediaItem(title, format); 
    items[numberOfItems] = item; 
    numberOfItems++; 
} 

這裏是

public void listAllItems(){ 
    for (int i = 0; i < items.length; i++){ 
     System.out.println(items[i].getTitle()); 
    } 
    } 

我有問題的部分這不是它應該做的,但我現在的問題是,它並打印出項目的整個列表,但也給出了NullPointerException,我不知道爲什麼。這是被稱爲吸氣是一個基本的Eclipse產生的吸氣

public String getTitle() { 
    return title; 
    } 

這是一個Java我粗,所以我新,所以請溫柔。我相信這是所有相關的部分,所以任何幫助表示讚賞!

+2

'item [i]'對於'i'的某個值肯定是空的。如果你不調用'addNewItem' 100次,那麼這行代碼總會有一個NPE。 – 2014-12-06 13:05:21

回答

1

items.length永遠是整個陣列的(在你的案件100)的長度,nomatter您實際上添加了多少物品。試着這樣說:

public void listAllItems(){ 
    for (int i = 0; i < numberOfItems; i++){ 
    System.out.println(items[i].getTitle()); 
    } 
} 

你的情況的問題是不吸氣本身,而是試圖調用getTitle()方法上null

+0

非常感謝。我不敢相信我沒有注意到這一點,並且可以發誓我之前嘗試過這種方法無濟於事,它上面的方法正是如此,但它的確如此,新鮮的眼睛可以創造一個不同的世界。再次感謝你。 – 2014-12-06 13:45:28

0

你確實有100個名額保留,但我懷疑不是所有的地方都被佔用。這在訪問這些元素的屬性時會導致NullPointerException。

您可以使用下面的方法來從陣列中的所有非空元素:

public void listAllItems(){ 
    int i = 0; 
    while (i < numberOfItems){ 
    if (items[i] != null) // Null check 
     System.out.println(items[i].getTitle()); 
    i+=1; 
    } 
} 

或者使用相同的「for」循環只空校驗也應該足夠了:

public void listAllItems(){ 
    for (int i = 0; i < numberOfItems; i++) { 
    if (items[i] != null) 
     System.out.println(items[i].getTitle()); 
    }  
}