gpt4 book ai didi

java - 我的类中的removeListing()方法抛出空指针异常

转载 作者:行者123 更新时间:2023-11-30 02:12:52 25 4
gpt4 key购买 nike

这是我的库类,它创建一个名为“listings”的 Book 类型的“库”。我尝试创建一个removeListing() 函数,但是当我在名为listings 的数组上调用它时,在removeListing() 方法中的第一个if 语句处出现空指针异常。

我检查了关于什么是空指针异常的另一个问题,但我仍然不确定为什么我的特定 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.");
}
}
}
}
}

最佳答案

在构造函数中,您使用大小为 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();
}

输出

Default size of listings-8

Occupied size of listings-0

null

null

null

null

null

null

null

null

当您调用 Library 构造函数时,您的列表将包含 8 个 null 元素。因此,如果调用removeListing(),将会得到空指针异常。你应该

  • 调用 addListing() 将图书添加到列表中。

  • 不要从 addListing() 中调用appendValue,而是将 Book 对象添加到 addListing() 内的列表中,如下所示,

    listings[totalListings++] = new Book(t, a, y);

  • 在removeListing()的for循环中使用totalListings,因为您在addListing()方法中增加了totalListings的值。

关于java - 我的类中的removeListing()方法抛出空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49606206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com