2017-07-02 11 views
0

スイッチケースの場合、私は5つの異なるケースがあり、そのうち3つは共通のアクションを共有して繰り返したくないと思います。以下のコードは、私が達成したいもの(スイッチ内)を完全に示しています。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のロジックは完全に異なっているはずです。この例のような類似点はありません(「共通変数」を除く)。 – user2651804

答えて

0

を私は繰り返したくはありません一般的なアクションを5異なるケースがあり、これら シェアの3想像してみてください。

スイッチケースブロックでケースをグループ化する通常の方法は、ケースタグをまとめてグループ化することです。すべてのcaseタグの直後にコードブロックが続くように強制するルールはありません。 :分:秒:ミリ秒

これはその次のコードのブロックに示されているが時間に分数の日番号を変換します。 M:S:Hに分数日を変換するよりエレガントな方法があり、脇として

// 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; 
    } 

を:分と秒の場合のコードは共有され、それらのためのケースが一緒にグループ化されているM整数演算であるが、上記は例示的なものである。

+0

はいこれはif(x == 1 || x == 2)に対応します。しかし私は5つの完全に別々の場合があります。 – user2651804

+0

「完全に分離されている」という言葉は、switch-caseブロックがおそらく役に立たないことを意味します。あなたの要件は明確ではありません。最低限、ケースは何らかの種類のプロパティまたはインデックスによって共通して関連づけられなければなりません。 – scottb

+0

「共有」の場合は、読みやすくするために別々の行にする必要があります。 –

関連する問題