2016-10-10 2 views
-4

私は他の場合に使用できる範囲値のswitch文を実装する必要がありますが、私はスイッチのパフォーマンスが良いと思います。私は、Javaの範囲値のswitch文を使用する必要があります

変数の値が1-150の範囲にあるように私は私のロジックを処理します。変数の値が150-300の範囲内にある場合、他のロジックがあり、範囲が300-450である場合、いくつかの異なるロジックなどがあります。

だから、私は一般的に固定値のスイッチを使用していたので、この場合はどのようにスイッチを使用できますか。 ありがとうございます。

+2

あなたが最初に試したことを私たちに教えてください。 "他にも使えるけど、スイッチの性能は良くなると思うよ"このような単純な例では、 "パフォーマンス"について心配しないでください。プログラムを最初から実行することを心配しています。 –

+3

算術演算を実行して、各ケースを特定の定数に変換することができます。しかし、 'if'文を使う方が良いかもしれません。 'switch'ステートメントは範囲用ではありません。 – khelwood

+8

あなたの質問に答える必要があります:http://stackoverflow.com/questions/10873590/in-java-using-switch-statement-with-a-range-of-value-in-each-case – tomas

答えて

8

私はあなたが式

switch (value/150) { 
    case 0: // 0 - 149 
      break; 
    case 1: // 150 - 299 
      break; 
    case 2: // 300 - 449 
      break; 
    default: // otherwise. 
} 

あなたが(value-1)/150を使用している場合は、1から150まで、151から300まで、301から450など

EDITを取得し使用することをお勧め:ケース0も-148受け付けます - 0 ((1)/ 150){...}のように整数除算の性質上、これを避けるには、if/elseステートメントと条件演算子を使用できます。

+1

非常に革新的な答え –

+2

@AmberBeriwalの歓声、例えば50で割った場合、あまり複雑でなくても、異なるサイズの範囲を持つことができます。 –

0

これはできません。

Java Language Specification for switchを確認すると、caseの後の式がConstantExpressionまたはEnumConstantNameである必要があります。
これらのどちらも範囲ではありません。

コメントにはいくつかの選択肢が指摘されています。 ifステートメントを使用できます。あなたが本当に大量のケースを持っていない限り、それはパフォーマンスに大きな違いをもたらすべきではありません。
または(this answer, linked in the comments by @tomasのように)異なる範囲を区別するための別個の機能を作成することができます。

範囲が標準(たとえば101-200,201-300など)の場合は、数式を使用することもできます。丸め誤差に注意してください!数式のエッジケースをテストして、正しいことを確認します。

関連する問題