从main方法的Book类中调用dlete方法会产生NullPointerException。从Main类中运行delete方法时,效果很好。
线程“主”中的异常java.lang.NullPointerException 在algorithm / algorithms.Main.main(Main.java:20)
我想念什么?
主要:
private static Book book;
public static void main(String[] args) {
Book[] bookArray = {new Book(123, "Book1"),
new Book(321, "Book2"),
new Book(456, "Book3"),
new Book(654, "Book4"),
new Book(789, "Book5")};
System.out.println(bookArray.length);
bookArray = book.removeBook(bookArray, 456);
System.out.println(bookArray.length);
}
Book类方法(不包括属性,getter和setter):
public Book[] removeBook(Book[] books, int findISBN) {
Book[] newArray = new Book[books.length - 1];
int j = 0;
for (int i = 0; i < books.length; i++) {
if(books[i].getISBN() != findISBN) {
newArray[j] = books[i];
j++;
}
}
return newArray;
}
答案 0 :(得分:3)
您已将Book
声明为静态变量,但尚未对其进行初始化...
private static Book book;
执行此操作时...
bookArray = book.removeBook(bookArray, 456);
book
是null
看起来您需要...
new Book()
分配一个Book
static
类中创建方法Book
,并在Book.removeBook(...)
方法中调用main
。答案 1 :(得分:1)
您只用Book
声明了对private static Book book;
的引用。在调用任何方法之前,必须先实例化它。在book = new Book();
方法中包含main
。
在同一个资源类中包含一个资源和对该资源执行的操作(在您的情况下,Book
是该资源)是不好的设计,这也不值得。
最好创建另一个类似BookOperations
的类,并在其中编写所有逻辑,以使您的Book
资源整洁而简单。