[英]Operating On Object Contained In An ArrayList
我有一堂課叫做Book:
public class Book {
private String title;
private boolean borrowed;
public Book(String bookTitle) {
// Store name of book and mark as not borrowed
title = bookTitle;
borrowed = false;
}
public void borrowed(){
// Set borrowed to true
borrowed = true;
}
public void returned() {
// Set borrowed to false
borrowed = false;
}
public boolean isBorrowed() {
// Return borrowed
return borrowed;
}
public String getTitle() {
// return title;
return title;
}
}
還有一個叫做Library的類:
public class Library {
private String address;
private ArrayList<Book> books = new ArrayList<Book>();
public Library(String Address) {
address = Address;
}
private void addBook(Book book) {
books.add(book);
}
private void borrowBook(String title) {
boolean bookFound = false;
// Find Book
}
我需要完成roweBook方法,該方法將在數組列表中進行搜索以查找書籍是否在圖書館中,然后使用book類的rowed()方法將書籍標記為已租借。
到目前為止,盡管我在如何調用借用方法或getTitle方法以能夠對數組列表中包含的特定book對象進行操作方面遇到了麻煩,但我仍然遇到類似的情況
for (int i = 0; i < books.size(); i++) {
if (books[i].getTitle() = title) {
books[i].borrowed();
}
}
您的邏輯檢查應為
books[i].getTitle().equals(title)
或說
title.equals(books[i].getTitle())
。
您沒有正確比較兩個字符串。
還考慮其中一個或兩個均為null
。
for (int i = 0; i < books.size(); i++) {
if (books.get(i).getTitle().equals(title)) {
books.get(i).borrowed();
}
}
是否檢查(分配)問題
if (books[i].getTitle() = title)
應替換為(比較)
if (books.get(i).getTitle().equals(title))
為了更好
private void borrowBook(String title) {
boolean bookFound = false;
// Find Book
for(Book book : books)
{
if (book.getTitle().equals(title))
{
bookFound = true;
book.borrowed();
break;
}
}
//...More stuffs you may want to do
}
到目前為止,您甚至無法編譯,但無法使用索引oberator []
訪問ArrayList的元素。 您需要使用列表的List#get(index) 。 同樣對於比較您正在使用equal運算符的String來說,這是不正確的,它只對大多數字符串在不同情況下不相等的Compats引用進行了引用(除非進行了interned)。 您需要使用String#equals(otherString)或String#equalsIgnoreCase(otherString)方法。
for (int i = 0; i < books.size(); i++) {
if (books.get(i).getTitle().equals(title)) {
books.get(i).borrowed();
}
}
您還可以使用增強的for循環
for (Book book : books) {
if (book.getTitle().equals(title)) {
book.borrowed();
}
}
首先,您的簽入if
語句錯誤,即if (books[i].getTitle() = title)
應該替換為,
if(books.get(i).getTitle().equals(title))
並且不要忘了在調用borrowed()
函數之前檢查borrowed
標志。
因此您的最終代碼應如下所示:
for (int i = 0; i < books.size(); i++)
{
if (books.get(i).getTitle().equals(title))
{
if(!books.get(i).isBorrowed())
books.get(i).borrowed();
else
{
//Inform user book already borrowed
}
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.