我目前正在开展一个图书馆项目,在那里我有一个客户群,他们都有自己的帐户,而且所有客户都有书籍的arraylist。
我的LoanBook功能通过首先获取客户索引,然后将2个for循环中的书籍索引添加到bookarray中。就像这样:
public void loanBook() {
Scanner in = new Scanner(System.in);
boolean loop3 = true;
System.out.println("So you wanna loan a book? Excellent choice.");
while (loop3) {
System.out.println("Search for the book you're looking for: ");
String bookChoice = in.nextLine();
for (int i=0; i<books.size() && loop3; i++) {
if (books.get(i).toString().contains(bookChoice) == true) {
System.out.println("Looking for: " + books.get(i).toString() + "?");
System.out.println("press y to loan book or n to try again");
String choice1 = in.nextLine();
if (choice1.equalsIgnoreCase("y")) {
for (int j=0; j<customers.size() && loop3; j++) {
if (customers.get(j).getSignedIn() == true) {
customers.get(j).booksLoaned.add(books.get(i));
Timer.delayFunction();
System.out.println(customers.get(j).printBookList());
System.out.println("Returning to main menu");
loop3 = false;
}
}
}
if (choice1.equalsIgnoreCase("n")) {
break;
}
}
}
}
}
问题在于,当我使用此方法从客户类打印客户个人书单时:
public ArrayList<Book> printBookList() {
return booksLoaned;
}
它为所有客户显示相同的书单,因此如果我在客户1中添加一本书,则客户2也会这样。我的Customer类中的BooksLoaned arraylist不是静态的。
问题还没有解决,我已经改变了
customers.get(j).booksLoaned.add(books.get(i));
到
customers.get(j).booksLoaned.add(new Book(books.get(i).toString()));
因此它现在为数组创建一个新对象,而不是引用其他书籍数组。仍然所有的账户似乎都分享了他们不应该分享的书籍。