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而不是我期望的所需字符串实例。
答案 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;
}
}