1

我的学业有问题,希望我能在这里得到一些帮助!显然在第 17 行有一个 nullpointerexception 错误。

import java.util.*;
import java.text.*;
public class Librarian {
    private ArrayList<Book> bookList = new ArrayList<Book>();

    public Librarian() {
        bookList = new ArrayList<Book>();
    }
    public ArrayList<Book> findBooksWrittenBy(ArrayList<Book> bookList, String author) {
        ArrayList<Book> booksByAuthor = new ArrayList<Book>();
        for(int i = 0; i < bookList.size(); i++) {
            Book book = bookList.get(i);
            String author1 = book.getAuthor();
            if(author1.equalsIgnoreCase(author)) {
                booksByAuthor.add(book);
            }
            if(booksByAuthor.size() != 0) {
                booksByAuthor = booksByAuthor;
            }else {
                booksByAuthor = null;
            }
        }
        return booksByAuthor;
    }
4

4 回答 4

8

将检查放在 for 循环之外的作者。然后,检查大小并立即返回,将对象分配给自身是多余的。

如下:

  public ArrayList<Book> findBooksWrittenBy(ArrayList<Book> bookList, String author) {
    ArrayList<Book> booksByAuthor = new ArrayList<Book>();
    for(int i = 0; i < bookList.size(); i++) {
        Book book = bookList.get(i);
        String author1 = book.getAuthor();
        if(author1.equalsIgnoreCase(author)) {
            booksByAuthor.add(book);
        }
    }
    if(booksByAuthor.size() > 0) {
        return booksByAuthor;
    }else {
       return null;
    }
}
于 2012-10-30T17:51:57.560 回答
3

更短更好:

public List<Book> findBooksWrittenBy(ArrayList<Book> bookList, String author) {
    List<Book> booksByAuthor = new ArrayList<Book>();
    for(Book b: bookList) {
        if(author.equalsIgnoreCase(b.getAuthor) {
            booksByAuthor.add(book);
        }
    }
    return booksByAuthor;
}
于 2014-02-20T17:52:17.887 回答
2

似乎您的第一次迭代工作正常,它将在第二次迭代中将数据添加到 booksByAuthor 对象,它不为零,因此它在您的代码中设置为 null。

建议 :

public ArrayList<Book> findBooksWrittenBy(ArrayList<Book> bookList, String author) {
    ArrayList<Book> booksByAuthor = new ArrayList<Book>();
    for(int i = 0; i < bookList.size(); i++) {
        Book book = bookList.get(i);
        String author1 = book.getAuthor();
        if(author1.equalsIgnoreCase(author)) {
            booksByAuthor.add(book);
        }

    }
    return booksByAuthor;
}
于 2012-10-30T17:54:26.223 回答
0

我想可能当 i=0 时, bookList(0).getAuthor() 和 author 参数之间不匹配,这不会在您的 booksByAuthor 列表中添加任何书。所以 else 语句将被执行并且结果 booksByAuthor 被设置为空。

然后当 i=1 时,您在导致 NPE 的空对象上调用了一个方法。

于 2012-10-30T17:55:41.400 回答