Java初学者:nullpointerexception错误

Fra*_*ank 1 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;
    }
Run Code Online (Sandbox Code Playgroud)

和另一个.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());
    }
Run Code Online (Sandbox Code Playgroud)

}

这是程序输出:

0
Exception in thread "main" java.lang.NullPointerException
    at Library.addBook(Library.java:59)
    at Library.main(Library.java:14)
Run Code Online (Sandbox Code Playgroud)

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

mas*_*tov 5

您必须创建数组collection才能将任何内容放入其中.更换

Book[] collection;
Run Code Online (Sandbox Code Playgroud)

通过

Book[] collection = new Book[BOOK_COLLECTION_SIZE];
Run Code Online (Sandbox Code Playgroud)

BOOK_COLLECTION_SIZE是一个相当高的数字.

更好的是,使用一个List而不是一个数组.这样您就不必事先猜测您的库大小:

List<Book> collection = new LinkedList<Book>();
Run Code Online (Sandbox Code Playgroud)

然后addBook可以看起来像这样:

public void addBook(Book newBook)
{
    this.collection.add(newBook);
}
Run Code Online (Sandbox Code Playgroud)

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