ArrayList列出null而不是对象的实例

iii*_*iii 0 java

public class Library{
    private ArrayList<Book> books = new ArrayList<Book>();

    public void addBook()
    {
        Scanner sc = new Scanner(System.in);

        System.out.println("Enter title of the book: ");
        String title = sc.nextLine();
        System.out.println("Enter the author: ");
        String author = sc.nextLine();

        String bookID = bookID();

        Book b = new Book(author,title,bookID,true);
        books.add(b);

        System.out.println( title + " by "+ author +" added to library.");
        System.out.println("Book ID: " + bookID);

    }

    public void listBooks()
    {
        for (Book temp : books)
        {
            if (temp.loanStatus() == true) System.out.print("*");

            System.out.println(temp.getTitle() + " by " + temp.getAuthor()+
                "ID: " + temp.getID());
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

这是我的Book类:

public class Book {

    private String author;
    private String title;
    private String ID;
    private boolean loanRecord = true;

    public Book(String au, String titl, String id, boolean loan)
    {
        au = author;
        titl = title;
        loan = loanRecord;  
        id = ID;
    }

    public String getTitle()
    {
        return title;
    }

    public String getAuthor()
    {
        return author;
    }

    public String getID()
    {
        return ID;
    }

    public boolean loanStatus()
    {
        return loanRecord;
    }

    public void checkoutBook()
    {
        loanRecord = false;
    }

    public void returnBook()
    {
        loanRecord = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当我调用我的listBooks()方法列出添加到booksArrayList的所有书籍时Book,我添加的每个对象都会出现,null而不是我期望的所需字符串实例.

Ale*_* C. 5

您在构造函数中交换了分配.

它应该是:

public Book(String au, String titl, String id, boolean loan){   
  author = au;    
  title = titl;   
  loanRecord = loan;  
  ID = id;    
}
Run Code Online (Sandbox Code Playgroud)

作为快速说明,您可以覆盖类中的toString方法Book,只需执行以下操作:

for (Book temp : books){
     if (temp.loanStatus()) 
          System.out.print("*");
     System.out.println(temp);
}
Run Code Online (Sandbox Code Playgroud)