JAVA空指针异常getTitle方法,我可以';我找不到

JAVA空指针异常getTitle方法,我可以';我找不到,java,nullpointerexception,Java,Nullpointerexception,编码时没有错误,但当我运行它时,它说 Exception in thread "main" java.lang.NullPointerException at homework.Book.getTitle(Book.java:36) at homework.BookMain.main(BookMain.java:61) Java Result: 1 *********************************** 打包作业; 公共类图书管理员{ 公共静态void main

编码时没有错误,但当我运行它时,它说

Exception in thread "main" java.lang.NullPointerException
    at homework.Book.getTitle(Book.java:36)
    at homework.BookMain.main(BookMain.java:61)
Java Result: 1
***********************************
打包作业;
公共类图书管理员{
公共静态void main(字符串[]args){
int i;
int选项;
Book[]bookSet=新书[20];
bookSet[0]=新书(“我敢打赌”,“乔伊斯·迈耶”,2007年);
书集[1]=新书(《发自内心》,《马里奥·何塞·拉德拉牧师》,2012年);
书集[2]=新书(《从恐惧中解脱》,《鲍勃·比斯》,1993年);
书集[3]=新书(“非凡的事实之书”,“浴室读者协会”,2006年);
bookSet[4]=新书(《胖子统治世界》,《K.L.走》,2003年);
Book.numberOfBooks=5;
Book getter=新书();

对于(i=0;i除了getter/setter设计疯狂之外,
booksInShelf
是静态的,这意味着它属于整个
Shelf
类(该类的实例共享该字段的值)因此,当您将book添加到一个
书架
并增加此字段时,对于
书架
的所有实例,它都将增加

因为这个循环

for(i=0; i<shelf1.booksInShelf; i++)
您正在选择此
null
并在
getter.getTitle(null)
中使用它,它将尝试调用
返回null.title
,它将对NPE进行大小写,因为
null
没有
title



若要解决此问题,请从
书架
字段中删除
static
修饰符。

您正在反向操作。为什么要传递目标?为什么不获取实际对象的字段?我们不允许使用public,因此我创建了返回属性的方法。您正在反向思考。而不是
公共字符串getAuthor(Book target)
将其设置为
公共字符串getAuthor()
。而不是
getter.getAuthor(someBook)
,而是执行
someBook.getAuthor()
并返回
对象的字段值。为什么
int booksInShelf=0;
是静态的?您的设计有很多错误。请阅读。
for(i=0; i<shelf1.booksInShelf; i++)
        aBookInShelf = placer.pickBook(shelf1, i);
        System.out.println(getter.getTitle(aBookInShelf)+"   "+getter.getAuthor(aBookInShelf)
                +"   "+getter.getYear(aBookInShelf));