2011-03-28 33 views
18

我有兩個變量,可以是真或假。我通過對數據庫查詢某些產品ID是否存在來獲得這些信息。更好的方法來查找這兩個變量是真的還是都是假的

現在我需要設置另一個變量,這將是真或假。當兩個變量都爲真或兩者都爲假時,它將爲真值。這是錯誤的,一個是真的,另一個是假的。

目前我使用照顧它if語句

if (v1 == true && v2 == true) 
result = true; 
else if (v1==false && v2 == false) 
result = true; 
else if (v1 == true && v2 == false) 
result = false; 
else if (v1==false && v2 == true) 
result = false; 

是否存在這樣做的更好的辦法?

+10

如果(變量==真)是一個反模式的地獄,頗負盛名,順便說一下:) – 2011-03-28 07:20:25

回答

11

您可以使用邏輯XOR運算符和邏輯運算符不作爲:

result = !(v1^v2); 
+2

這比需要的更復雜,看DXM的答案。 – jmg 2011-03-28 06:29:29

+4

@jmg:非常真實。我已經提高了DXM。 – codaddict 2011-03-28 06:30:46

98

我可能會丟失一些非常基本的,但我給它一個去:

result = (v1 == v2); 
+9

實際上,括號在這裏甚至是可選的,因爲賦值運算符在Java,C++,C等語言中幾乎都具有最低的優先級。 – Benoit 2011-03-28 07:43:15

+5

與接收這麼多upvotes的布爾值有關的Java答案是什麼(另請參見http:// stackoverflow.com/questions/3907384/whats-the-most-concise-way-to-get-the-inverse-of-a-java-boolean-value/3907396#3907396)? :D – BoltClock 2011-03-28 09:21:51

+0

+1:我總是使用這種形式的檢查。 – Raedwald 2011-03-28 12:14:32

2

使用異或運算符(^):

boolean result = !(v1^v2) 
-4

爲什麼不直接比較兩者呢?

if(v1 == v2) result = true; 
+0

-1在相反的情況下不返回錯誤。 – bluish 2011-03-28 06:47:50

-3
if(v1 == v2) 
return true; 
else 
return false; 
+1

或返回v1 == v2 – Petruza 2011-03-28 13:25:23

-2

簡單的方法是,如果兩個變量是相等的,那麼它應該是真實的,如果任何一個是假的那是假的。 檢查這一個。

if(v1 == v2) 
    return true; 
else 
    return false; 
+0

-1太多的代碼如此簡單 – bluish 2011-07-06 11:41:56

3

這類問題,給定一個真值表,儘量減少重現真值所需的邏輯,往往是很好的處理,在這裏Karnaugh Maps

你的真值表的樣子:

 
v1 v2 f(v1, v2) 
    t t  t 
    t f  f 
    f t  f 
    f f  t 

其實,正如其他人已經指出的那樣,鑑於真值表,對邏輯的基本熟悉應該立即產生功能! xor

但是,如果你把真值表,並繪製成卡諾圖,它看起來像:

 

     v2 
     f t 
    --------- 
v f| t | f | 
1 t| f | t | 
    --------- 

和函數的樣子:!V1 V2 || v1v2裏面如果再看看2 variable karnaugh map examples可以看出來簡化了! xor

無可否認,2個變量卡諾圖最好用普通的邏輯運算通過良好,熟悉和記憶來處理。但是,當擴展超過2個變量時,卡諾圖非常明亮 - 你應該看看它們。

+0

upvoted解決方案的有趣選擇,我傾向於認爲result =!(v1 xor v2)比result =(v1 == v2)更清晰。 – 2011-03-28 07:32:36

+20

我禮貌地建議你多喝點咖啡......如果你發現「!(a^b)」比「a == b」更清楚,那麼你一定還是睡着了。並有一個噩夢。 – 2011-03-28 08:47:56

相關問題