有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

getter上的java NullPointerException

我正在准备期末考试。它应该是一个“媒体库”,用于存储有关个人媒体(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我粗糙,所以我是新的,所以请温柔。我相信这是所有相关的部分,所以任何帮助都是感激的


共 (2) 个答案

  1. # 1 楼答案

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

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

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

  2. # 2 楼答案

    你们有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());
       }     
    }