簡體   English   中英

使用if / else語句返回布爾值

[英]Using an if/else statement to return a boolean

我有一個方法,將數組作為參數並返回一個布爾值。

在方法內部,我有一個if / else語句。 如果該語句為true,則我希望結果返回true,如果該語句為false,則我希望該語句返回false。

public static boolean allPositive (double[] arr)
{
    for (int i = 0; i < arr.length; i++)
    {
        if(arr[i] > 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    return //What do i put here?
}

}

當然,它最后需要一個返回值。 但是,我對應該從底部返回的內容感到困惑。 我應該如何重寫呢?

首先,您的代碼是錯誤的。 例如,使用{1, -1, 2} ,您的方法將返回true。

如果用不同的方式編寫,則可以避免出現以下問題:

public static boolean allPositive (double[] arr) {
  for (int i = 0; i < arr.length; i++) {
    if(arr[i] < 0)
    {
        return false;
    }
  }
  return true;
}

編輯 :甚至更好的是,使用Java 8和Streams的單行解決方案(我喜歡單行解決方案):

public static boolean allPositive (double[] arr) {
  //Stream the array and see if any elements matches condition `<0`.
  return !Arrays.stream(arr).anyMatch(i->i<0);
}

如果您需要多於一行代碼來使用集合,那么您應該了解Streams

public static boolean allPositive (double[] arr)
{

    boolean b = true;

    for (int i = 0; i < arr.length; i++)
    {
        if(!(arr[i] > 0))
        {
            b = false;
        }

    }
    return b;
}

Java的工作方式,通過確保所有返回都發生在if else語句之外來確保代碼沒有問題。 這是因為,程序員的一個常見錯誤是返回if else語句,但從不創建else條件,因此該方法從不返回任何內容。 這樣做是一種更好的實踐做法,因此以后不要試圖弄清楚為什么不返回方法的問題。

您必須在方法末尾(循環之后)返回如果將空數組傳遞給您的方法應返回的值。 由您決定一個空數組是否為“ allPositive”。

Arnaud的答案有多個return語句。 代碼氣味。 如果數組為{1,-1,2},則DreadHeadedDeveloper的答案存在邏輯錯誤,它返回true。

此功能/方法簡潔,並遵循良好的編碼習慣。

public static boolean allPositive (double[] arr) {
    boolean ret = true;
    for (int i = 0; i < arr.length; i++) {
        if(arr[i] <= 0) {
            ret = false;
        }
    }
    return ret;
}

暫無
暫無

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

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