2011-08-11 9 views
4

Javaが同じケースの複数の同一インスタンスをどのように処理するかを知りたいと思います。 私は概念的には、次のことが理にかなっていると思う:Java switchステートメントの複数/繰り返しケース

switch (someIntegerValue) 
{ 
    case 1: 
    case 2: 
     DoSomethingForBothCases(); 
     break; 
    case 3: 
     DoSomethingUnrelated(); 
     break; 
    case 1: 
     DoSomethingForCase1ThatReliesUponExecutionOfTheEarlierFunctionCall(); 
     break; 
    case 2: 
     DoSomethingForCase2ThatReliesUponExecutionOfTheEarlierFunctionCall(); 
     break; 
} 

基本的に、私は1または2、後に、その後(フォールスルーを使用して)、いずれの場合のために実行されるコードの塊を持っていると思い、チャンクを持っていますケース2に対してのみ実行されるコードです。

代わりに次のコードが必要ですか?

switch (someIntegerValue) 
{ 
    case 1: 
     DoSomethingForBothCases(); 
     DoSomethingForCase1ThatReliesUponExecutionOfTheEarlierFunctionCall(); 
     break; 
    case 2: 
     DoSomethingForBothCases(); 
     DoSomethingForCase2ThatReliesUponExecutionOfTheEarlierFunctionCall(); 
     break; 
    case 3: 
     DoSomethingUnrelated(); 
     break; 
} 

私の実際のコードはより複雑であるが、(同じ原理を使用することになり、すなわちケース1 "のようなもの:いや、大丈夫... ケース2:!うん、このコードを実行!; 場合3:いいえ、再びケース1:再びまだいや!; ケース2:うん、このコードを実行; これ以上の例:??!!2つのswitch文と間違ってすべてを完了」)

+0

最初のコードはコンパイルされません。 2番目のコードは構文的に正しいです。 switch文はブランチテーブルです(wikipediaを参照してください)。 – DwB

答えて

1

Java switch文で大文字と小文字を繰り返すことはできません。コンパイルエラーです。実際には良いファクタリングのように見えるので、あなたが示唆したようにする必要があります。

+0

これでGeoffと - OPの2番目の例は良いようです。 – TJunkie

+0

ありがとう - それは私が行ったものです! –

5

何か?

switch (someIntegerValue) { 
    case 1: 
    case 2: 
     DoSomethingForBothCases(); 
     break; 
    case 3: 
     DoSomethingUnrelated(); 
     break; 
} 

switch (someIntegerValue) { 
    case 1: 
     DoSomethingForCase1ThatReliesUponExecutionOfTheEarlierFunctionCall(); 
     break; 
    case 2: 
     DoSomethingForCase2ThatReliesUponExecutionOfTheEarlierFunctionCall(); 
     break; 
} 

これは私がやることです。

+0

特に間違っていることはありません(ケース3が完全に無関係でない場合、2つのswitch文が必要になるかもしれません)が、2つのスイッチでOP内の2番目のコードチャンクを使用することをお勧めします。コンパイルされたコード(少なくともこのようなかなり単純なケースでは)は、どちらかというとはるかに効率的ではないでしょう。:D –

0

あなたはそれを行うことができません。あなたは重複したケースを持つことはできません、コンパイラは騒々しいフィット笑を投げるでしょう。私はあなたがそれぞれのケースをチェックしてから他のケースをチェックしたいと思っているというあなたの論理を理解していますが、breakステートメントはあなたをswitch-caseステートメントから引き離します。お勧めしたいのは、さまざまなことを連続してチェックしたい場合は、ループを使用することを検討することです。ループでif文を結合すると、他のものより前にコードの一部を実行するのに役立ちます。

スイッチのステートメントが本当に好きな場合は、複数のスイッチケースを作成して、あるものが他のものの前に起こるようにすることができます。

0

どのようにこれについてですか? 注:私は知らない多くのJavaの、唯一スウィフト2次の2つのボタンのアクションを持って

var someIntegerValue = 1 

func someSwitch(){ 

switch (someIntegerValue) { 
    case 1: 
    break; 
    case 2: 
     DoSomethingForBothCases(); 
    break; 
    case 3: 
    DoSomethingUnrelated(); 
    break; 
    } 
} 

someIntegerValue +=1 // changes someIntegerValue to next case 
someIntegerValue() //loads switch 

何らかのアクションNEXT何らかのアクションボタンボタン2戻る

someIntegerValue -=1 // changes someIntegerValue to next case 
someIntegerValue() //loads switch 
+0

また、最初に関数をロードすることを忘れないでください。 –

関連する問題