2012-02-23 49 views
0
if((x == 5) || (x == 2)) { 
    [huge block of code that happens] 
    if(x == 5) 
     five(); 
    if(x == 2) 
     two(); 
} 

因此,我正在檢查5或2.並且在5或2之後發生了一個巨大的代碼塊。問題是,然後我希望根據它是5還是2來做不同的事情。我不想爲5或2個單獨的條件代碼(複製它很笨拙)。我也不喜歡我上面這樣做,因爲x其實很長。Java條件(檢查條件內的第一個條件)

有沒有辦法這樣說:

if((x == 5) || (x == 2)) { 
    [huge block of code that happens] 
    if(first conditional was true) 
     five(); 
    if(second conditional was true) 
     two(); 
} 

我總是可以做到這一點我上面做的方式。只是好奇,如果這樣的選擇存在。我能想到的

+6

我會用[巨大的代碼塊出現這種情況]更關心自己。我的第一個想法是「重構,任何人?」 – duffymo 2012-02-23 23:52:03

+0

這讓我很擔心,回答這個問題的如此之多的重量並不關心這段代碼中使用的if語句的數量。 – Shahzeb 2012-02-24 00:06:20

+0

我不是一個有經驗的編碼員。這是一個嚴重的問題(條件數)? – 2012-02-24 00:12:13

回答

2

一種方式基本上是「別名」長布爾在if條件表達式:

boolean expr1, expr2; 

if (expr1 = (x == 5) | expr2 = (x == 2)) { 
    // huge block of code that happens 
    if (expr1) five(); 
    if (expr2) two(); 
} 

我使用的非短路操作,以確保表達式2被分配。

+0

Soooo文化調理的許多年來對視線的畏縮...... :) – Affe 2012-02-23 23:55:10

+0

哈哈不錯...非常內聯,我挖 – sauce 2012-02-23 23:57:09

+0

優秀!!謝謝! – 2012-02-24 00:15:30

3

如果條件語句是大的,醜陋的,而且比x == 5漂亮得多,然後就存放在boolean結果:我能想到的

boolean xWasFive = x == 5; 
boolean xWasTwo = !xWasFive && x == 2; 
if (xWasFive || xWasTwo) { 
    ... 
    if (xWasFive) doA; 
    else if (xWasTwo) doB; 
} 
+0

嗯這是一個相當乾淨的解決方案 – 2012-02-24 00:05:01

0

唯一的事情是設置一個標誌,這兩個選項。的排序是這樣的:

boolean wasFive = x == 5; 
boolean wasTwo = x == 2; 

if(wasFive || wasTwo) { 
    [huge block of code that happens] 
    if(wasFive) 
     five(); 
    if(wasTwo) 
     two(); 
} 
+3

'x == 5? true:false'完全等價於'x == 5'。 – 2012-02-23 23:58:21

+0

當然不會通過我的checkstyle/findbugs配置 – 2012-02-24 00:05:34

+0

@LouisWasserman - 你絕對正確,永遠不會在實踐中這樣做。感謝代碼審查,我編輯了我的答案! – sauce 2012-02-27 22:00:35

0

也許是這樣的:

final boolean firstCondition = (x == 5); 
final boolean secondCondition = (x == 2); 

if (firstCondition || secondCondition) { 
    // code 
    if(firstCondition) { 
     // code 
    } 
    else if (secondCondition) { 
     // code 
    } 
}