【问题标题】:Java boolean method returnJava布尔方法返回
【发布时间】:2015-05-11 20:41:07
【问题描述】:

我的 Java 程序中有一个布尔方法,我想知道为什么 NetBeans 建议对我的代码进行此更改:

return isPrime != 0;

我写的是:

if (isPrime == 0) {
            return false;

        }
        else{
            return true;
        }

两者都可以正常工作,但我无法理解 NetBeans 建议的更改背后的逻辑。不返回 true 或 false。有人可以向我解释这背后的逻辑吗?谢谢

【问题讨论】:

  • 坦率地说:这并没有错。它描述了你想要表达的东西。但是想象一下连续 10 个条件,比如你有 70 行代码而不是 1 行。只要你测试的条件是简单的比较,你就应该使用快捷表示法。你会习惯像上面的例子一样快速地阅读它们,甚至在一段时间后阅读它们会更快。

标签: java netbeans boolean


【解决方案1】:

NetBeans 完全正确。表达式 一个布尔值。您可以通过更改和尝试轻松证明这一点。

0 != 0 的计算结果是什么? (提示:它是false)。 1 != 0 呢? (提示:它是true)。

这不是你更冗长的代码所说的吗?

【讨论】:

  • 不是返回一个布尔值吗?
  • 这些是布尔表达式。你在问什么?
  • 感谢 duffymo 我现在已经习惯了 Java,并试图理解编码中捷径背后的逻辑。
  • 我不会说表达式是布尔值。我会说它评估为布尔值,而布尔值是一种数据类型。但我不是母语人士。
【解决方案2】:

而不是

if (isPrime == 0) {
    return false;
} else {
    return true;
}

试试

return (isPrime != 0);

也是一样,我给你看重构路径。以

开头
if (isPrime == 0) {
    return false;
} else {
    return true;
}

一样
if (isPrime != 0) {
    return true;
} else {
    return false;
}

可以通过替换来减少,用函数 'doIsPrime()' 替换 'isPrime != 0'

private boolean doIsPrime() {
   return isPrime != 0;
}

代入

if (doIsPrime()) {
    // guaranteed to be the same as above!
    return doIsPrime();
} else {
    return doIsPrime();
}

可以减少两个块(作为重复代码)

if (doIsPrime()) {
}
return doIsPrime();

并通过删除空块周围的 if 语句进一步减少

return doIsPrime();

现在撤消替换 'doIsPrime()' 回到 'isPrime != 0'

return isPrime != 0;

没有必要真正进行替换;但是,我发现它更好地展示了 if 语句是多余的推理。

【讨论】:

  • 哈哈,漂亮的解释。喜欢!
【解决方案3】:

不返回真假。

错误。比较的结果isPrime != 0,正在返回一个booleantruefalse

有人可以向我解释一下这背后的逻辑吗?

第一个代码等同于第二个代码。如果isPrime0,则返回false,否则返回true。如果isPrime0!= 运算符将产生false,如果不是0,则产生true

【讨论】:

    【解决方案4】:

    这意味着它返回谓词isPrime != 0的结果 如果 isPrime = 0,则谓词为假,因此返回假 如果 isPrime != 0,则谓词为真,因此返回真

    【讨论】:

      【解决方案5】:

      只是为了减少代码。

      表达式isPrime != 0 返回一个布尔值。如果isPrime == 0 为假,isPrime != 0 则为真。这样就可以省去 if 语句和一些代码行了。

      【讨论】:

        【解决方案6】:

        只是为了补充已经说过的内容:

        虽然您的解决方案和 NetBeans 推荐的方法完全正确,但另一种方法也是:

        if (isPrime == 0) {
            return false;
        }
        
        return true;
        

        我不知道 NetBeans 会对这种方法提出什么建议,但我想它会提出与上面相同的建议。

        【讨论】:

          猜你喜欢
          • 2013-10-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-22
          • 2012-11-03
          • 1970-01-01
          • 2021-04-21
          • 2011-11-28
          相关资源
          最近更新 更多