1

我正在通过 CodingBat 上的练习。在此页面上,解决方案中有此提及:

  // The above can be shortened to:
  //   return ((aSmile && bSmile) || (!aSmile && !bSmile));
  // Or this very short version (think about how this is the same as the above)
  //   return (aSmile == bSmile);

是否有任何规则可以解释简短版本?你如何从逻辑 AND 到等于?

4

3 回答 3

5

第一个条件基本上是说:如果两者都为真或都为假。只有当它们相等时才会发生这种情况。

请注意,在 Java 中,布尔对象存在一个陷阱,其中将打印以下两个内容:

Boolean aSmile=new Boolean(true),bSmile=new Boolean(true);
if((aSmile & bSmile) || (!aSmile && !bSmile)) { System.out.println("SAME"); }
if(aSmile!=bSmile)                            { System.out.println("NOT THE SAME"); }
于 2013-01-12T00:40:52.597 回答
2

解释这两个表达式等价的最简单方法是创建一个逻辑表:

aSmile  |  bSmile
   0         0     1
   0         1     0
   1         0     0
   1         1     1

将 a & b 的所有组合插入第一个表达式,您可以看到第一个表达式仅在 aSmile 和 bSmile 相等时为真。所以 aSmile == bSmile 只有在它们相等时才会返回 true。

于 2013-01-12T00:43:57.317 回答
2

如果(aSmile && bSmile)评估为真,则两者都为真。

如果(!aSmile && !bSmile)评估为真,那么两者都是假的。

因此,如果这些条件之一(均为 TRUE,或均为 FALSE)为真,则长版本返回 TRUE。

最简单地问(如在简短版本中),aSmile 和 bSmile 是否等效?

于 2013-01-12T00:44:12.963 回答