簡體   English   中英

對ArrayList中包含的對象進行操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM