2013-11-28 320 views
0

我無法理解此問題的答案,並希望得到更多有經驗的Java實踐者的意見。評估布爾表達式

以下哪項將評估爲true只有當布爾表達式ABC全是假的?

(A)!A && !(B && !C)
(B)!A || !B || !C
(C)!(A || B || C)
(d)!(A && B && C)
(E)!A || !(B || !C)

我的回答是d,因爲我的印象是,下所有布爾表達式都是錯誤的,但答案是C.

回答解釋

(C)爲了!(A || B || C)是真實的,(A || B || C)必須評估爲假。只有在ABC都是全部錯誤時纔會發生這種情況。當AB爲假並且C爲真時,選項A的計算結果爲true。在選項B中,如果有的ABC爲假,則布爾表達式的計算結果爲true。在選項D中,如果ABC中的任何一個爲假,則布爾表達式的計算結果爲true,因爲我們有!(false)。選擇E評估爲真所需的全部內容爲A爲假。由於true||(any)的計算結果爲true,因此BC都可以是真或假。

+4

你不瞭解什麼? –

+1

「答案解釋」聽起來像對答案的解釋... –

+3

只要A,B或C中的任何一個都是假,但問題就說:只有當它們全都是假時,D才爲真。 –

回答

3

我認爲你只需要一些解釋和更多的圖形解釋。

基礎知識

或者

OR操作符(||)輸出true如果它的一個operands(之類的東西AB)都是如此。因此,在一個真值表,看起來像這樣:

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等於Falseiff(當且僅當)A,B,C = False

爲什麼不是D?

那麼讓我們看看AND邏輯的真值表。

A B OUTPUT 
f f f 
f t f 
t f f 
t t t 

正如你所看到的,爲AND只有這樣,才能輸出true是,如果所有的參數都true,否則會輸出錯誤。雖然這意味着D將評估爲假,但如果ABC包含爲假,則其將評估爲假;而問題明確指定它們必須是假的,其中的全部爲

我希望這有助於!

+0

只有在**的情況下,問題中的關鍵字纔是**。如果問題是「如果布爾表達式A,B和C都是假的,那麼下列哪一項將評估爲真?」,那麼D可能是一個正確的答案。 –

+0

我很抱歉。它已經很晚了!感謝您的更正。 – christopher

1

A && B && C僅當且僅當所有ABC爲真時才成立。如果任何變量爲假,則整個表達式爲假。這意味着如果有任何變量爲假,則!(A && B && C)爲真。

A || B || C如果任何變量爲真,則爲true。如果所有的變量都是錯誤的,這只是錯誤的。這意味着!(A || B || C)只有在所有變量都是假的情況下才爲真。