为啥下面的代码块应该返回 false?

Posted

技术标签:

【中文标题】为啥下面的代码块应该返回 false?【英文标题】:Why should the following block of code return false?为什么下面的代码块应该返回 false? 【发布时间】:2019-02-20 17:12:42 【问题描述】:
public boolean monkeyTrouble (boolean aSmile, boolean bSmile) 
    if (aSmile && bSmile) 
        return true;
    
    if  (!aSmile && !bSmile) 
        return true;
    
    return false;

我不明白为什么最后一行代码应该return false;

谁能解释一下?谢谢。

【问题讨论】:

因为如果只有一只猴子在微笑,那么就没有猴子的烦恼 创建一个真值表。显示所有 4 种可能的输入值组合的表格。然后手动计算方法的结果。然后检查导致错误的行... 您可以根据需要返回 true。但是前两个块将毫无用处,因为它总是会返回 true。我们无法告诉您自己的方法(没有明确的文档)应该返回什么。这是你的选择。该方法应该做什么? 顺便说一句:您可以将代码简化为return aSmile == bSmile; 【参考方案1】:

从问题描述来看:

如果他们都在微笑,或者他们都没有微笑,我们就有麻烦了。如果我们遇到麻烦,则返回 true。

因此,如果其中一个人在微笑,我们就没有麻烦。

if (aSmile && bSmile) 
   return true;

如果他们俩都在微笑,请掩饰。并且:

if  (!aSmile && !bSmile) 
    return true;

如果他们都没有微笑,请掩饰。这些是该方法应返回 true 的仅有的两种组合。因此,如果这些条件都不成立,则需要返回 false。

【讨论】:

哦,这有点像“else-statement”吗?因为这是唯一的另一种可能性 @Sam 类似。它只是不是用else 编写的,因为如果任何if 语句为真,它将return 并退出该方法,因此没有必要。【参考方案2】:

创建一个真值表并检查发生了什么

aSmile bSmile 
true true 
true false 
false true 
false false 

案例一:monkeyTrouble (true, true)

 if (aSmile && bSmile) 
        return true;

案例2:monkeyTrouble (true , false)

 return false

案例3:monkeyTrouble (false, true)

return false

案例4:monkeyTrouble (false, false)

  if  (!aSmile && !bSmile) 
            return true;

这就是为什么最后一条语句在两种情况下执行的原因。

【讨论】:

以上是关于为啥下面的代码块应该返回 false?的主要内容,如果未能解决你的问题,请参考以下文章

为啥下面的表达式返回 true?

用 display:block 输入不是块,为啥不呢?

java 为啥要实现 function?

为啥这个 MSVC asm 块没有 ret,或者非 void 函数有返回?

JAVA-初步认识-第三章-局部代码块

为啥 List.contain 返回 false [重复]