每个循环都有麻烦

时间:2019-11-13 19:01:19

标签: java swing for-loop each

因此,我试图制作一个摆动的GUI,以搜索书籍列表,然后在JTextArea中显示该书籍。这是我的actionPerformed方法

#create E and R before the loop and store eigenpairs directly into these arrays
import scipy.sparse as sparse
import scipy.linalg as linalg
import numpy as np

a = sparse.random(128, 128, 0.8)
b = sparse.random(128, 128, 0.8)*1j
a = a + b
a = a + a.H

E = np.empty(128, np.float)
R = np.empty((128, 128), np.complex)

for i in range(0, 100):
        E[:], R[:][:] = linalg.eigh(a.todense())

所以我的问题是for每个循环。自然,它将为列表中的每个不相等元素打印“找不到书”。因此,如果我有十本书,并且输入第一本书的名称,它将打印该书,然后打印“找不到书”九次。我该如何重新格式化以仅打印出一件事?

2 个答案:

答案 0 :(得分:2)

您可以使用boolean found标志,然后检查是否在循环末尾找到了这本书

    }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");

    }

答案 1 :(得分:1)

如果您仍要继续使用foreach循环,则可以将该部分提取到函数中,如果匹配则返回书名,但是如果不匹配则返回“找不到”,而不是附加每个迭代

赞:

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"; }

因此,您只是调用此函数而不是像这样的foreach循环:

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

更干净。

最后,如果您只是想在每次用户搜索时都放置结果,则不确定使用 append 方法是否正确。

如果您有一个列表,则可以使用 indexOf 包含方法来确定列表中是否存在某个元素,这样会更干净。

这可以为您提供更多帮助:https://www.baeldung.com/find-list-element-java