2017-07-02 23 views
0

對於交換機的情況下想象我有5個不同的情況和這三個分享我不想重複一個共同行動。下面的代碼完全說明了我想實現的目標(但是在開關中):如何在我的switch語句中創建一個小組的案例?

int x = 5; 
    if(x == 1) { 
     System.out.println("one"); 
    } else if (x == 2) { 
     System.out.println("two"); 
    } else { 
     String common = "thirty-"; 
     if (x == 3) { 
      method_one(common); 
     } else if (x == 4) { 
      method_two(common); 
     } else if (x == 5) { 
      method_three(common); 
     } 
    } 

我可以優雅地將它寫成開關盒嗎?我目前的解決方案如下所示:

int[] smallGroup = {1,2}; 
    if (!Arrays.asList(smallGroup).contains(x)) 
      common = "thiry-"; 
+0

你並不真的需要一個開關都沒有。只需要一個包含預構建值的數組,併爲您的'x'選擇一個。 –

+0

@ SJuan76這個問題在連接線程中沒有詢問也沒有回答。我的情況3到5是完全不同的。 – user2651804

+0

@AndyTurner我看到我的問題可能已經制定不佳。情況3至5中的邏輯應該完全不同。沒有類似之處(除了'common'變量之外),例如它從示例中出現。 – user2651804

回答

0

對於交換機的情況下想象我有5個不同的情況和這三個 份額,我不想重複一個共同行動。

在switch-case塊中對案例進行分組的常用方法是將他們的case標籤簡單地組合在一起。沒有規定強制每個案例標籤必須緊跟着一段代碼。

這的代碼塊被示出低於轉換分數天數時:分:秒:毫秒。爲分鐘和秒的情況下的代碼是共享的,並且例爲它們被組合在一起:

// HOURS, MINUTES, SECONDS, AND MILLIS are integer constants; f is a fractional day 

    for (int i = HOURS; i <= MILLIS; i++) { 
     switch (i) { 
      case HOURS: 
       f = f * 24.0; 
       break; 
      case MINUTES: case SECONDS: 
       f = f * 60.0; 
       break; 
      case MILLIS: 
       f = f * 1000.0; 
       break; 
     } 
     x = trunc(f);   // trunc() here is equivalent to Math.floor() 
     hmsm[i] = (int) x; // hmsm[] is the result array 
     f = f - x; 
    } 

順便說一句,存在要分數天至H轉換更優雅的方式:M:S:M用整數算術,但以上是說明性的。

+0

是這將對應於如果(X == 1 || X == 2)。但我有5個完全分開的案例。 – user2651804

+0

「完全分離」這個詞意味着一個開關盒模塊可能不會有用。您的要求不明確。至少,這些案件必須通過某種財產或指數共同相關。 – scottb

+0

儘管爲了便於閱讀,「共享」案例應該在不同的行上。 –

相關問題