你總是可以這樣做:
if ((x > 10) ? (y >5) : (z > 2)) action1
else action2
爲了完整起見,任何if p then q else r
說法在邏輯上可以表示爲(!p && r) || q
。因此,我們可以表達原文的語句:
(!a && !c && action2) ||
(!a && c && action1) ||
(a && !b && action2) ||
(a && b && action1)
如果您收集動作1到一邊,你會得到:
(a && b && action1) ||
(!a && c && action1) ||
(a && !b && action2) ||
(!a && !c && action2)
它
a = x > 10
b = y > 5
c = z > 2
(!a && (!c && action2) || ((!b && action2) || action1))
,你可以作爲擴大了真正擴展爲:
(a && b && c && action1) ||
(a && b && !c && action1) ||
(!a && b && c && action1) ||
(!a && !b && c && action1) ||
(a && !b && c && action2) ||
(a && !b && !c && action2) ||
(!a && b && !c && action2) ||
(!a && !b && !c && action2)
而且從我們可以看到,我們可以把它簡化爲:
(a && b && c && action1) ||
(a && b && !c && action1) ||
(!a && b && c && action1) ||
(!a && !b && c && action1) ||
action2
由於導致動作2路全是導致動作1的任何路徑的否定,我們可以進一步簡化爲:
(a && b && action1) ||
(!a && c && action1) ||
action2
哪本身可以簡化爲:
(((a && b &&) || (!a && c)) && action1) ||
action2
然後可以寫爲:
if ((a && b) || (!a && c)) action1
else action2
哪一個變成: if((x> 10 & & y> 5)|| (!(x> 10)& & z> 2))action1 else action2
這是我們無論如何得到的。
來源
2009-02-23 16:38:04
MSN
在第2個動作2額外的逗號是一個錯字? – 2009-02-23 16:39:07
從一開始就檢查代碼以避免混淆會更好,但現在只需添加第一個「int x_result = x();」就可以自動工作「不工作」的答案。然後在表達式中使用x_result。 – 2009-02-23 17:06:45