布尔值!(aSmile && bSmile)和(!aSmile &&!bSmile)之间的区别

7 c*_* Hg 2 java boolean

总编号问题,在这个编码中练习http://codingbat.com/prob/p181646

为什么我放:

 return (aSmile && bSmile) || !(aSmile && bSmile);
Run Code Online (Sandbox Code Playgroud)

给定的做法的答案是错误的,而如果我把

 return (aSmile && bSmile) || (!aSmile && !bSmile);
Run Code Online (Sandbox Code Playgroud)

答案是正确的,!(aSmile && bSmile)与(!aSmile &&!bSmile)或其他让我的第一个答案错误的东西有什么区别吗?

Pat*_*ick 7

   A   |   B   | !(A && B) |
-------+-------+-----------|
  True |  True |   False   |
  True | False |   True    |
 False |  True |   True    |
 False | False |   True    |
Run Code Online (Sandbox Code Playgroud)
   A   |   B   | !A || !B  |
-------+-------+-----------|
  True |  True |   False   |
  True | False |   True    |
 False |  True |   True    |
 False | False |   True    |
Run Code Online (Sandbox Code Playgroud)
   A   |   B   | !A && !B  |
-------+-------+-----------|
  True |  True |   False   |
  True | False |   False   |
 False |  True |   False   |
 False | False |   True    |
Run Code Online (Sandbox Code Playgroud)

!(A && B)等于!A || !B,所以
!(A && B)!A && !B是不一样的东西