2016-02-05 33 views
1
if (currencyChosen.equals("RANDOM3") & convertTo.equals("RANDOM3")) 
    JOptionPane.showMessageDialog(null, "SAME SENTENCE"); 

else if (currencyChosen.equals("RANDOM2") & convertTo.equals("RANDOM2")) 
    JOptionPane.showMessageDialog(null, "SAME SENTENCE"); 

else if (currencyChosen.equals("RANDOM") & convertTo.equals("RANDOM")) 
    JOptionPane.showMessageDialog(null, "SAME SENTENCE"); 

如果我有這樣的代碼與多個,但相似的if語句與不同的條件,是否有辦法讓它更短,更整齊?多個IF語句與類似的標準JAVA

+0

也許提取一種方法。請注意,您應該總是使用大括號來表示if/else – 2016-02-05 06:46:52

+3

您可以進行總體檢查,以確定'currencyChosen'等於'convertTo';那麼你只需要檢查其中一個關於文字的值。 (哦,除了第一種情況下有一個空間 - 是故意的嗎?) –

+0

第一個示例中的「RANDOM3」和「RANDOM 3」之間的區別是故意的嗎? –

回答

2

採用的方法(假設currencyChosenconvertTo是字段):

private boolean foo(String input) { // TODO: use more meaningful names 
    return currencyChosen.equals(input) && convertTo.equals(input) 
} 

然後

if (foo("RANDOM3") || foo("RANDOM2") || foo("RANDOM")) { 
    JOptionPane.showMessageDialog(null, "SAME SENTENCE"); 
} 
+0

謝謝你的回答! – jkjk

2

你可以將其解壓縮到類似下面

if (currencyChosen.equals(convertTo)) { 
    final boolean random3 = isRandom(currencyChosen, "RANDOM3"); 
    final boolean random2 = isRandom(currencyChosen, "RANDOM2"); 
    final boolean random = isRandom(currencyChosen, "RANDOM"); 

    if (random3 || random2 || random) { 
     JOptionPane.showMessageDialog(null, "SAME SENTENCE"); 
    } 
} 

// .... 

private static boolean isRandom(String currencyChosen, String random) { 
    return currencyChosen.equals(random); 
} 
+1

Minor nit:這並不會縮短三個布爾值的評估。我只是在條件中內聯isRandom調用。 –

+0

非常感謝您的快速回答。有沒有辦法表達感謝?對不起,這個網站是新的。 – jkjk

+0

@AndyTurner這是真的,我只在這樣的情況下做到這一點,可讀性比性能更重要一些。 – Smutje

4

這聽起來像你可能想要類似於:

private static final List<String> VALID_CURRENCIES = 
    Arrays.asList("RANDOM", "RANDOM2", "RANDOM3"); 

... 

if (currencyChosen.equals(convertTo) && VALID_CURRENCIES.contains(currencyChosen)) { 
    JOptionPane.showMessageDialog(null, "SAME SENTENCE"); 
} 

調整變量名稱以適應您的上下文。你也可以使用Set<String>而不是List<String>,如果順序從來沒有重要的......只有少量有效的選項,它在性能上並沒有太大的差別。當N變大時,HashSet相對於列表的O(N)的O(1)性質僅僅是重要的。當然,無論如何,您可能想要使用Set<String>,以便將它作爲一個更清晰的對象來處理它只有。我的猜測是,無論如何,您可能還有另一個理由來獲得有效貨幣的列表(按特定順序) - 在這種情況下,也可以在此處使用該列表。

然而,隨着你的上下文的描述:

我在寫一個基本的轉換器和我試圖輸出,例如,選擇「從美元轉換爲美元」會輸出「你不能執行該操作

這聽起來像你可能只需要

if (currencyChosen.equals(convertTo)) { 
    ... 
} 

如果你以某種方式讓currencyChosenconvertTo不有效,你應該檢查,首先:

if (!VALID_CURRENCIES.contains(currencyChosen)) { 
    // Display error for invalid source currency 
    return; 
} 

if (!VALID_CURRENCIES.contains(convertTo)) { 
    // Display error for invalid target currency 
    return; 
} 

if (currencyChosen.equals(convertTo)) { 
    // Display error for source == target 
    return; 
} 

基本上,儘量使你的錯誤條件正交就可以。

+1

對O(1)使用哈希集。 –

+1

@McKevin:在這種情況下,它實際上可能比使用列表慢。只有三個條目,它們的長度不同 - 爲什麼要計算任何事情的哈希碼?我會澄清這一點。 –