Java初学者:nullpointerexception错误

时间:2015-09-20 11:49:03

标签: java arrays object

我正在开发一个图书管理程序(它是一个在线课程的作业),我无法在运行时解决nullpointerexception错误。

到目前为止,这是该计划:

//file Library.java
public class Library {

String address;
Book[] collection;
int collectionCounter = 0;

    // Add the missing implementation to this class
    public static void main(String[] args)
    {
        // Create two libraries
        Library firstLibrary = new Library("10 Main St.");
        Library secondLibrary = new Library("228 Liberty St.");
        // Add four books to the first library
        firstLibrary.addBook(new Book("The Da Vinci Code"));
        firstLibrary.addBook(new Book("Le Petit Prince"));
        firstLibrary.addBook(new Book("A Tale of Two Cities"));
        firstLibrary.addBook(new Book("The Lord of the Rings"));
    }

    //Constructor
    public Library(String libraryName)
    {
        address = libraryName;
        collectionCounter = 0;
    }

    //Methods
    public void addBook(Book newBook)
    {
        System.out.println(this.collectionCounter);
        this.collection[this.collectionCounter] = newBook;
        this.collectionCounter += 1;
    }

另一个.java文件,用于Book类:

public class Book {
String title;
boolean borrowed;

    // Creates a new Book
    public Book(String bookTitle) {
        // Implement this method
        title = bookTitle;
        borrowed = false;
    }
    // Marks the book as rented
    public void rented() {
        // Implement this method
        this.borrowed = true;
    }

    // Marks the book as not rented
    public void returned() {
        // Implement this method
        this.borrowed = false;
    }

    // Returns true if the book is rented, false otherwise
    public boolean isBorrowed() {
        // Implement this method
        return this.borrowed;
    }

    // Returns the title of the book
    public String getTitle() {
        return this.title;
    }

    public static void main(String[] arguments) {

        // Small test of the Book class
        Book example = new Book("The Da Vinci Code");
        System.out.println("Title (should be The Da Vinci Code): " + example.getTitle());
        System.out.println("Borrowed? (should be false): " + example.isBorrowed());
        example.rented();
        System.out.println("Borrowed? (should be true): " + example.isBorrowed());
        example.returned();
        System.out.println("Borrowed? (should be false): " + example.isBorrowed());
    }

}

这是程序输出:

0
Exception in thread "main" java.lang.NullPointerException
    at Library.addBook(Library.java:59)
    at Library.main(Library.java:14)

我理解错误是由一系列书籍引起的,但我真的不知道该怎么做,我从未见过将对象实例化作为方法的参数。提前谢谢!

2 个答案:

答案 0 :(得分:5)

您必须创建数组collection才能将任何内容放入其中。取代

Book[] collection;

通过

Book[] collection = new Book[BOOK_COLLECTION_SIZE];

BOOK_COLLECTION_SIZE是一个相当高的数字。

更好的是,使用List而不是数组。这样你就不必事先猜出你的图书馆大小了:

List<Book> collection = new LinkedList<Book>();

然后addBook可能如下所示:

public void addBook(Book newBook)
{
    this.collection.add(newBook);
}

你可以摆脱collectionCounter。如果您确实需要书籍数量,可以使用this.collection.size()

获取

答案 1 :(得分:3)

问题在于你的Library课程。 它的addBook方法使用this.collection,但这只是声明,因此仍然是null

public void addBook(Book newBook)
{
    System.out.println(this.collectionCounter);
    this.collection[this.collectionCounter] = newBook;
    this.collectionCounter += 1;
}