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

最初の反復が正常に機能しているようで、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 が null に設定されます。

次に、i=1 のとき、NPE の原因となった null オブジェクトでメソッドを呼び出しました。

于 2012-10-30T17:55:41.400 に答える