因此,我试图制作一个摆动的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每个循环。自然,它将为列表中的每个不相等元素打印“找不到书”。因此,如果我有十本书,并且输入第一本书的名称,它将打印该书,然后打印“找不到书”九次。我该如何重新格式化以仅打印出一件事?
答案 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