簡體   English   中英

For循環僅檢查最后一個值

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

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