簡體   English   中英

Java 中 if else 語句中的多個布爾值始終為 false

[英]Multiple boolean values in if else statement is always false in Java

我堅持這種方法,因為 if else 條件說

  • Condition usersInSales && usersInPayments is always false
  • Condition usersInSales && usersInLoans is always false
  • Condition usersInPayments && usersInLoans is always false

我嘗試了不同的條件組合並添加了錯誤值來嘗試解決它,但沒有幫助。 請問我有什么幫助嗎? 提前致謝

private List<UserResource> usersFilteredByDepartment(List<UserResource> users, boolean usersInSales, boolean usersInPayments, boolean usersInLoans) {

        if (usersInSales) {
            return getUsersInSales(users);
        } else if (usersInPayments) {
            return getUsersInPayments(users);
        } else if (usersInLoans) {
            return getUsersInLoans(users);
        } else if (usersInSales && usersInPayments) {
            return Stream.concat(getUsersInSales(users).stream(), getUsersInPayments(users).stream()).distinct().collect(Collectors.toList());
        } else if (usersInSales && usersInLoans) {
            return Stream.concat(getUsersInSales(users).stream(), getUsersInLoans(users).stream()).distinct().collect(Collectors.toList());
        } else if (usersInPayments && usersInLoans) {
            return Stream.concat(getUsersInPayments(users).stream(), getUsersInLoans(users).stream()).distinct().collect(Collectors.toList());
        } else return users;
    }
if (usersInSales) {
        return getUsersInSales(users);
    } else if (usersInPayments) {    ---> You get here when userInSales = false
        return getUsersInPayments(users);
    } else if (usersInLoans) {  --> You get here when usersInSales = false && usersInPayments = false
        return getUsersInLoans(users);
    }  else if () {  --> You get here when usersInSales = false && usersInPayments = false && usersInLoans = false. No use in comparing what you compare here. It will be always false as it reports to
     }

希望你現在能找到出路

您可以嘗試首先檢查最具體的約束,然后最后轉向更一般的約束。

if (usersInSales && usersInPayments) {
        return Stream.concat(getUsersInSales(users).stream(), getUsersInPayments(users).stream()).distinct().collect(Collectors.toList());
    } else if (usersInSales && usersInLoans) {
        return Stream.concat(getUsersInSales(users).stream(), getUsersInLoans(users).stream()).distinct().collect(Collectors.toList());
    } else if (usersInPayments && usersInLoans) {
        return Stream.concat(getUsersInPayments(users).stream(), getUsersInLoans(users).stream()).distinct().collect(Collectors.toList());
    } else if (usersInSales) {
        return getUsersInSales(users);
    } else if (usersInPayments) {
        return getUsersInPayments(users);
    } else if (usersInLoans) {
        return getUsersInLoans(users);
    } else return users;

檢查您的工作流程,但是 IMO,如果沒有所有這些 if、else 檢查,您的方法會更有意義。 僅此就足夠了

 private List<UserResource> usersFilteredByDepartment(List<UserResource> users, boolean usersInSales, boolean usersInPayments, boolean usersInLoans) {
    
     return Stream.concat(
usersInPayments? getUsersInPayments(users).stream(): Stream.empty(),
usersInLoans? getUsersInLoans(users).stream(): Stream.empty(), 
usersInSales? getUsersInSales(users).stream(): Stream.empty()
).distinct().collect(Collectors.toList());
    
}

你有兩個解決方案。

  1. 正如其他人所示,重新排列您的條件。 在您的代碼中,當您點擊&&語句時,您已經處理了一半為真的情況。 && (兩個子句)比單個子句更具限制性。

  2. 或者,將雙子句放在前面的 if 中。

     if (usersInSales) { return getUsersInSales(users); } else if (usersInPayments) { return getUsersInPayments(users); } else if (usersInLoans) { return getUsersInLoans(users); } else if (usersInSales && usersInPayments) { return Stream.concat(getUsersInSales(users).stream(), getUsersInPayments(users).stream()).distinct().collect(Collectors.toList()); } else if (usersInSales && usersInLoans) {...

變成

    if (usersInSales) {
        if (usersInPayments) { // Nested if is like && operator.
            return Stream.concat(getUsersInSales(users).stream(), getUsersInPayments(users).stream()).distinct().collect(Collectors.toList());
        } else {
            return getUsersInSales(users);
        }
    } else if (usersInPayments) { ...

這效率更高一些,我認為通常更可取。

考慮您的邏輯:您首先檢查usersInSales ,如果為真則返回。 然后您檢查usersInPayments並返回是否為真。 因此,當您檢查usersInSales && usersInPayments ,兩者都將為 false,因為您已經處理了其中一個為 true 的情況。

您需要更改您的邏輯,以便您可以添加而不是專門處理條件。

您的最后 3 個條件將永遠不會運行。 因為您的前三個條件之一已經成立。 要解決此問題,您需要顛倒條件的順序,請嘗試以下操作:

if (usersInSales && usersInPayments) {
    } else if (usersInSales && usersInLoans) {
    } else if (usersInPayments && usersInLoans) {
    } else if (usersInSales ) {
    } else if ( usersInLoans) {
    } else if (usersInLoans) {
    } else return users;

暫無
暫無

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

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