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

时间:2014-02-11 20:45:24

标签: 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());
        }
    }
} 

这是我的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;
    }
}

出于某种原因,当我调用listBooks()方法列出添加到books ArrayList的所有书籍时,我添加的每个Book对象都显示为{{1而不是我期望的所需字符串实例。

3 个答案:

答案 0 :(得分:5)

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

应该是:

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

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

for (Book temp : books){
     if (temp.loanStatus()) 
          System.out.print("*");
     System.out.println(temp);
}

答案 1 :(得分:3)

构造函数错误:

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

应该是:

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

要考虑的另一件事是覆盖Book类中的默认toString()方法。然后你可以使用以下方式打印对象:

for(Book b : books)
  System.out.println(b);

答案 2 :(得分:0)

我建议你重构你的Book课程,

public class Book {

    private String author;
    private String title;
    private String ID; // the name can be changed to id , if you are fine with it
    private boolean loanRecord = true;

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

    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;
    }
}