簡體   English   中英

每個循環都有問題

[英]Having trouble with for each loop

所以我正在嘗試制作這個 swing GUI,它可以搜索書籍列表,然后在 JTextArea 中顯示該書籍。 這是我的 actionPerformed 方法

public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("Search Books")){
        String bookName = JOptionPane.showInputDialog(this, "Enter books to search"); // prompts user to enter book title
        if (bookName == null){
            sArea.append("Enter a Book");
        }else{
            for (Book b: ban.getListOfBooks()){ //going through list of books to find matching title
                if (bookName.equals(b.getTitle())){ // appends string if it is equal to one of the book names
                    sArea.append(bookName);
                }else{ 
                    sArea.append("Book not found");
                }
            }
        }
    }else{
        ...

所以我的問題是 for each 循環。 自然,它會為列表中不相等的每個元素打印“找不到書”。 所以如果我有十本書,我輸入第一本書的名字,它會打印那個然后“找不到書”九次。 我怎么能重新格式化它只打印出一件事?

您可以使用 boolean 找到標志,然后檢查是否在循環結束時找到了這本書

    }else{
        boolean found = false;
        for (Book b: ban.getListOfBooks()){ //going through list of books to find matching title
            if (bookName.equals(b.getTitle())){ // appends string if it is equal to one of the book names
                sArea.append(bookName);
                found = true;
            }else{ 
            }
        }
        if (!found) sArea.append("Book not found");

    }

如果您仍想繼續使用 foreach 循環,您可以將該部分提取到 function,在匹配時返回書名,但如果任何書不匹配,則返回“未找到”而不是附加每個迭代

像這樣:

public String searchBook(List<Book> books, bookName ){
for (Book b: books)){ //going through list of books to find matching title
    if (bookName.equals(b.getTitle())){ 
        return b.getTitle();
    }
} 

return "Book not found"; }

所以你只需調用這個 function 而不是你的 foreach 循環,如下所示:

sArea.append(this.searchBook(ban.getListOfBooks() , bookName))

它更干凈。

最后我不確定使用append方法是否正確如果您只想在每次用戶搜索時放置結果。

此外,如果您有一個 List,您可以使用indexOfcontains方法來了解列表中是否存在元素,這樣會更干凈。

這可以為您提供更多幫助: https://www.baeldung.com/find-list-element-java

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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