[英]For loop is only checking last value
我感覺好像缺少了一些非常簡單的東西,但是似乎找不到很多幫助。 所以我正在設計使用vaadin和mem SQL數據庫中的h2登錄。 有一種方法可以從數據庫中以列表形式返回值。 問題是我在以下方法上遇到問題。 這意味着要遍歷列表中的每個條目,如果找到匹配的用戶名/密碼,則返回true。 如果沒有返回false .....
public boolean checkUserInDatabase(String username, String email) {
boolean result = false;
List<User> localArray = getUserList();
System.out.println("List retrieved...Checking user in database"+
localArray);
for (User u : localArray ) {
if (u.getUsername().equals(username)) {
result = true;
}
else {
result = false;
}
}
return result;
}
我知道目前我只檢查用戶名,但是,當我將用戶添加到數據庫時,它仍將只檢查該數據庫中的最后一個用戶。
您正在檢查每個值,但是從最后一個值中檢索它。 基本上,您需要已經存在的退出條件。 將您的代碼更改為此
public boolean checkUserInDatabase(String username, String email) {
List<User> localArray = getUserList();
for (User u: localArray) {
if (u.getUsername().equals(username)) {
return true;
}
}
return false;
}
這純粹是合乎邏輯的。 您正在遍歷列表, 直到最后返回值。 因此,您的程序將遍歷整個列表,並且僅提供最后的結果。 這是您完整,正確的程序:
public boolean checkUserInDatabase(String username, String email) {
boolean result = false;
List<User> localArray = getUserList();
System.out.println("List retrieved...Checking user in database"+ localArray);
for (User u : localArray ) {
if (u.getUsername().equals(username)) {
return true;
}
}
return result;
}
這樣,如果您的程序找到了用戶,它將直接回答“ true
而不是遍歷列表的其余部分。
找到用戶后,您絕對應該返回布爾值。
if (u.getUsername().equals(username)) {
return true;
}
您將遍歷整個列表並每次都重置返回值,因此最后一個是唯一重要的。 您需要類似:
boolean userFound = false;
for (User u : localArray )
{
if (u.getUsername().equals(username))
{
userFound = true;
break;
}
}
return userFound ;
您的想法是在最后一行返回值實際上是個好主意-這是單點返回的原理,我建議您這樣做。 它使調試更加容易。 所以解決方案是這樣的:
public boolean checkUserInDatabase(String username, String email) {
boolean result = false;
List<User> localArray = getUserList();
System.out.println("List retrieved...Checking user in database" + localArray);
for (User u : localArray ) {
if (u.getUsername().equals(username)) {
result = true;
break;
} else {
result = false;
}
}
return result;
}
盡管應該提到的是有不同的思想流派。 我個人更喜歡單點返回,但是可以找到兩者的論點。
Java 8解決方案是完全避免for循環,並簡單地說:
boolean userFound = collection.stream()
.map(User::getUsername)
.anyMatch(n -> n.equals(username))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.