我无法理解这个问题的答案,并希望得到更有经验的Java从业者的意见。
仅当布尔表达式 A
,B
,和 C
时,以下哪项才会评估为true都是假的吗?
(A)!A && !(B && !C)
(B)!A || !B || !C
(C)!(A || B || C)
(D)!(A && B && C)
(E)!A || !(B || !C)
我的回答是D,因为我的印象是 all 布尔表达式都是假的,但答案是C。
答案解释
(C)为了!(A || B || C)
为真,(A || B || C)
必须评估为false。仅当A
,B
和C
全部为false时才会发生这种情况。当A
和B
为假且C
为真时,选择A的评估结果为真。在选项B中,如果A
,B
或C
中的任何一个为false,则布尔表达式的计算结果为true。在选项D中,如果A
,B
或C
中的任何一个为假,则布尔表达式的计算结果为真,因为我们有!(false)
。选择E评估为真所需要的只是A
为假。由于true||(any)
的计算结果为true,因此B
和C
都可以为true或false。
答案 0 :(得分:3)
我认为你只需要一些解释,并对正在发生的事情进行更详细的解释。
基础知识
或的
如果其中一个||
(true
,operands
之类的内容)为真,则OR运算符(A
)输出B
。所以在真值表中,看起来像这样:
A B OUTPUT
f f f
f t t
t f t
t t t
这是如何适用于您的
如您所见,OR
逻辑输出false
的唯一方法是所有操作数均为假。只有当 布尔表达式A,B和C都是假的时,问题才会说明
该列表中唯一符合该标准的人确实是C.让我们通过一个例子:
Assume A, B and C = False.
// We'll now test if option C is the correct one.
C: !(A || B || C)
// Let's plug in our values.
C: !(False || False || False)
// And let's simplify it. False || False || False = False.
C: !(False)
C: True.
// Success! Now we need to test it when one of the values are true.
C: !(True || False || False)
// Let's simplify again. True || Anything = True.
C: !(True).
C: False.
成功!我们现在知道,通过更改其中一个值,我们得到了False
。因为我们改变了哪一个并不重要,我们通过演示证明C
等同于False
iff(if if only only) {{1} }。
为什么不是D?
让我们看一下A,B,C = False
逻辑的真值表。
AND
正如您所看到的,A B OUTPUT
f f f
f t f
t f f
t t t
输出AND
的唯一方法是,如果所有参数都是true
,否则输出为false。虽然这意味着D将评估为false,但如果true
,A
和B
包含 false,则评估为false;而问题明确指出所有必须是假的。
我希望这有帮助!
答案 1 :(得分:1)
A && B && C
,A
和B
都为真时, C
才为真。如果任何变量为false,则整个表达式为false。这意味着如果任何变量为false,则!(A && B && C)
为真。
A || B || C
为真。如果所有变量都是假的,则仅为假。这意味着!(A || B || C)
仅在所有变量都为假时才为真。