我正在对CodingBat进行练习。在此page上,解决方案中提到了这一点:
// 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到等于?
答案 0 :(得分: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"); }
答案 1 :(得分:2)
解释这两个表达式的等效性的最简单方法是创建一个逻辑表:
aSmile | bSmile
0 0 1
0 1 0
1 0 0
1 1 1
插入&的所有组合b在第一个表达式中,您可以看到第一个表达式仅在aSmile和bSmile相等时才为真。所以aSmile == bSmile只有在它们相等时才会返回true。
答案 2 :(得分:2)
如果(aSmile && bSmile)
评估为真,那么两者都是真的。
如果(!aSmile && !bSmile)
评估为真,那么两者都是假的。
因此,如果这些条件中的任何一个(均为TRUE,或两者都为FALSE)为真,则长版本返回TRUE。
最简单地问(如在短版本中),是aSmile和bSmile等价吗?