2014-12-06 122 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()); 
    }  
}