getter上的NullPointerException

时间:2014-12-06 13:03:48

标签: java arrays oop nullpointerexception getter

我正在上课。它应该是一个“媒体库”,用于存储有关人物媒体(DVD,游戏等)的信息,以及它应该在新媒体项中采用的其他内容,将它们存储到数组中并在提示时显示它们。它完成了所有这些但是当它显示时它在getter上有一个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,我不知道为什么。被调用的getter是一个基本的eclipse生成的getter

    public String getTitle() {
    return title;
    }

这是一个Java I粗,所以我是新的所以请温柔。我相信这是所有相关部分,所以任何帮助都表示赞赏!

2 个答案:

答案 0 :(得分:1)

items.length将始终是整个数组的长度(在您的情况下为100),无论您实际添加了多少项。试试这样:

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

您的案例中的问题不是getter本身,而是尝试在getTitle()上调用null方法。

答案 1 :(得分:0)

你确实有100个位置,但我怀疑并非所有的地方都被占用了。当访问这些元素的属性时,这会导致NullPointerException。

您可以使用以下方法从数组中获取所有非null元素:

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

或者只使用null检查使用相同的'for'循环也应该足够了:

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