这是我的库类,它创建了一个名为“列表”的类型的“库”。我试图创建一个removeListing()函数,但是当我在我的数组命名列表上调用它时,我在removeListing()方法的第一个if语句中得到一个空指针异常。
我检查了另一个关于nullpointerexception是什么的问题,但我仍然不确定为什么我的特定if语句抛出一个。谢谢你的帮助!
class Library {
private Book[] listings;
// Contains all books in the library
// Not guaranteed that every location is a valid book
private int totalListings;
// Represents the total number of books in the library
private static final int DEFAULT_SIZE = 8;
// Default size the library is set to
public Library()
{
listings = new Book[DEFAULT_SIZE];
}
// Default and only constructor
// Create a library with a capacity of DEFAULT_SIZE
public boolean addListing(String t, String a, int y)
{
if (totalListings < DEFAULT_SIZE) //this may also be written as if(totalListings < DEFAULT_SIZE)
{
System.out.println("Your book " + t + ", written by " + a + ", on "
+ y + " was added to the library.");
Object[] newObj = appendValue(listings, t, a, y);
totalListings++;
return true;
}
else{
System.out.println("There was no more room in the library.");
return false;
}
}
private Object[] appendValue(Book[] listings, String t, String a, int y) {
ArrayList<Object> temp = new ArrayList<>(Arrays.asList(listings));
temp.add(new Book(t, a, y));
return temp.toArray();
}
// Try to add a book
// Return true if the book can be added
// If there are no spots left return false and don't add the book
public void removeListing(String title, String author, int year){
for(int i=0; i<listings.length; i++){
if(listings[i].getTitle().equals(title)){
if(listings[i].getAuthor().equals(author)){
if(listings[i].getYear() == year){
System.out.println("Found your book.");
}
}
}
}
}
答案 0 :(得分:0)
您收到NullPointerException,因为listings[i].getTitle()
为空。列表的标题为空,因为您实际上从未为listings
中的任何8本书设置标题。
要快速修复NullPointerException,请将if语句更改为以下内容:
if(title.equals(listings[i].getTitle())) {
...
}
当listings[i]
没有标题时,这将返回false。
要修复整个程序,您的appendValue
功能会出现错误。你永远不会真正修改listings
。看起来应该是这样的:
private void appendValue(Book[] listings, String t, String a, int y) {
listings[totalListings] = new Book(t, a, y);
}
答案 1 :(得分:0)
在构造函数中,您正在使用大小为8的Book []初始化列表,但不填充任何值。
listings = new Book[DEFAULT_SIZE];
我添加了一个方法getBooksDetails()供您理解,它打印Book []的详细信息。
public void getBooksDetails(){
System.out.println("Default size of listings-" + listings.length);
System.out.println("Occupied size of listings-" + totalListings);
for (int i = 0; i < listings.length; i++) {
System.out.println(listings[i]);
}
}
如果从main()调用此方法,则可以在控制台中看到以下输出。
public static void main(String... args){
Library library = new Library();
library.getBooksDetails();
}
<强>输出强>
listing-8的默认大小
列表的占用大小-0
空
空
空
空
空
空
空
空
当您调用Library构造函数时,您的列表将包含8个null元素。因此,如果调用removeListing(),将获得nullpointer异常。 你应该
而不是从addListing()调用appendValue,只将Book对象添加到addListing()中的列表,如下所示,
listing [totalListings ++] = new Book(t,a,y);
在removeListing()的for循环中使用totalListings,因为你在addListing()方法中增加了相同的值。