web-dev-qa-db-ja.com

スイッチステートメントで以上を使用する方法

Switchステートメントを使用して変数がいくつかの数値より大きいかどうかを確認する最良の方法は何ですか?または、if-elseの使用をお勧めしますか?私はそのような例を見つけました:

int i;

if(var1>var2) i = 1;
if(var1=var2 i = 0;
if(var1<var2) i = -1;

switch (i);
{
    case -1:
    do stuff;
    break;

    case 0:
    do stuff;
    break;

    case 1:
    do stuff;
    break;

}

Switchステートメントで「以上」を使用することについて、初心者に何を伝えることができますか?

11
Vlad Holubiev

これがあなたが求めていることかどうかはわかりませんが、次のようにすることができます:

int var1;
int var2;

int signum = Long.signum((long)var1 - var2);
switch(signum) {
    case -1: break;
    case 0: break;
    case 1: break;
}
20
Stewart

if(var1>var2){}else if (var1==var2) {} else {}構文を強くお勧めします。ここでスイッチを使用すると、意図が非表示になります。そして、breakがエラーによって削除された場合はどうなりますか?

スイッチは、比較ではなく、列挙値に対して有用かつ明確です。

11
Guillaume

最初の提案:switchは状態のチェックではなく切り替えにのみ使用する必要があることを示しています。

JLS switchステートメントから

SwitchStatement:
    switch ( Expression ) SwitchBlock

式では、intまたはEnumに変換可能な式がサポートされています。

これらのラベルは、caseステートメントの定数式(§15.28)または列挙型定数(§8.9.1)の値と同様に、switchステートメントに関連付けられているといいます。

Java 7の文字列値もサポートされます。論理式はサポートされていません。1.6以下のswitchステートメントでは、定数式とEnum定数のみが許可されます。

あるいは、@ Stewartの回答にあるように行うこともできます。

6
Narendra Pathai

Javaはcaseステートメントの範囲ではなく直接値のみをサポートするため、スイッチを使用する必要がある場合は、最初にオプションにマッピングしてから、スイッチをオンにします。ただし、これはかなり過剰です。ifステートメントを使用してください。

4
Oliver Matthews

Switchステートメントは、特定の値が返されたときにコードを実行するためのもので、if if elseを使用すると、1つのステートメントで値の範囲を選択できます。複数の範囲を調べたい場合は、次のようなことをお勧めします(個人的にはInteger.signumメソッドを好みます)。

int i;

if (var1 > var2) {
  i = 1;
}
else if (var1 == var2) {
  i = 0;
}
else {
  i = -1;
}
3
talegna

ifステートメントのほうがよいでしょう。 switchアプローチははるかに不明確であり、この場合、switchアプローチは客観的に間違っていますComparable#compareTo の契約では、-1または1を返す必要はありません。返されるintの値が負または正であることだけが必要です。 compareTo-42を返すことは完全に合法であり、switchステートメントは結果を破棄します。

2

one変数の値を使用する場合は、スイッチを使用します。 multiple変数が機能している場合は、ifを使用します。あなたの述べた問題では、それはifであるはずです。

0
Sajal Dutta

残念ながら、Javaでそれを行うことはできません。 CoffeeScriptまたは他の言語で可能です。

追加のメソッドで「実行」を移動して、if-else-ステートメントを使用することをお勧めします。このようにして、if-elseを明確に読み取り可能なコードに含めることができます。

0
treeno