【问题标题】:Using an if/else statement to return a boolean使用 if/else 语句返回布尔值
【发布时间】:2014-12-19 07:07:19
【问题描述】:

我有一个将数组作为参数并返回布尔值的方法。

在方法内部,我有一个 if/else 语句。如果语句为真,我希望结果返回真,如果语句为假,我希望语句返回假。

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?
}

}

当然,它最后需要一个返回值。但是,我对我应该在底部返回什么感到困惑。我应该如何重写这个?

【问题讨论】:

  • 如果你只检查第一个元素,为什么你的方法叫allPositive
  • @talex 你是什么意思?他正在遍历整个数组?
  • @DreadHeadedDeveloper 不。仔细看一下:代码将在第一次迭代时以return truereturn false 结束
  • 我的立场是正确的,谢谢

标签: java oop if-statement boolean


【解决方案1】:

首先,您的代码是错误的。例如,使用{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

【讨论】:

    【解决方案2】:
    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 条件,因此该方法永远不会返回任何内容。这样做是一种很好的做法,这样您就不会在以后试图找出一个方法不会返回的原因时出错。

    【讨论】:

    • 这实际上检查最后一个元素是否为正。您应该将b = true更改为b = b &amp;&amp; true,并将b初始化为true
    • 这个怎么样?它与您所说的不同,但我认为它可以解决问题
    • 看起来不错。它只取决于“积极”的定义(在法国,它表示&gt;= 0,而在美国,它表示&gt;0)但算法很好。
    • @DreadHeadedDeveloper 这是一个约定俗成的问题。对于我们(法国人)positive 表示 &gt;=0strictly positive 表示 &gt;0。而在美国,&gt;=0 似乎被称为non negative&gt;0 则被简单地称为positive。你能确认一下吗?
    • @DreadHeadedDeveloper 不,程序不会有不同的行为。我只是想知道名为allPositive 的方法应该返回什么(取决于开发人员如何解释positive
    【解决方案3】:

    Arnaud 的答案有多个返回语句。代码气味。如果数组为 {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;
    }
    

    【讨论】:

    • 你能解释一下我的错误吗?事实上,你的几乎和我的一模一样!!
    • 现在你把我弄糊涂了,我做错了什么,我真的不知道我的错误在哪里!!
    • 为什么我的代码有异味?我认为循环在第一个负数处停止是一件好事。您更喜欢breakmaybe 吗?多个 return 语句在 C 中不好,但我不认为它们在 Java 中不好。
    • Sorry DreadHeadedDeveloper,看了之后,没错。否定(!)让我陷入了循环。
    【解决方案4】:

    如果将空数组传递给您的方法,您必须在方法结束时(循环之后)返回应返回的值。由您决定空数组是否为“allPositive”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-07
      • 2016-03-18
      • 2020-09-19
      • 2020-08-20
      • 1970-01-01
      • 2013-12-12
      • 1970-01-01
      • 2021-08-31
      相关资源
      最近更新 更多