4

switch に変数を指定せずに switch ケースのコードを書くことはできますか? int x と int y という 2 つの変数があるとします。x と y のさまざまな組み合わせに基づいて条件付きでコードを実行したいと考えています。例えば

switch
{
    case (x==1 && y==1): //do something.
        break;
    case (x==3 && y==-1): //do something.
        break;
    case (x==0 && y==3): //do something.
        break;
    default: //do something.
        break;
}

このコードは私にエラーを与えます。

4

7 に答える 7

2

if-else問題にa をより適切に使用できます

于 2012-12-02T15:18:53.543 に答える
1

それは本当により良い読み書きではありません

if (x==1 && y==1) {
    //do something.
}
else if (x==3 && y==-1) {
    //do something.
}
else if (x==0 && y==3) {
    //do something.
}
else {
    //do something.
}

でも、スイッチケースでは無理です。

于 2012-12-02T15:17:26.967 に答える
1

明らかな方法は、次を使用することですelse if

if (x==1 && y==1) {
    //do something.
}
else if (x==3 && y==-1) {
    //do something.
}
else if (x==0 && y==3) {
    //do something.
}
else {
   // do something as default case.
}

1 つの変形は、別の方法を使用することです。

利点は、その後使用できることですreturn

if (x==1 && y==1) {
    //do something.
    return;
}
// precompute something...
if (x==3 && y==-1) {
    //do something.
    return;
}
if (x==0 && y==3) {
    //do something.
    return;
}
// do something as default case.
return;

しかし、ネストされたelseブランチがない限り、大きな違いはありません。

しかしcase実際にメリットがif elseあるのは、ケースの完全な列挙がある場合です。次に、プログラミング エラーを回避します。

switch(direction) {
  case NORTH: // Do something
    break;
  case SOUTH: // Do something
    break;
  case EAST: // Do something
    break;
  case WEST: // Do something
    break;
}

default良い点は、分岐が必要ないことをコンパイラが実際にチェックできることです。

あなたが完全な列挙を持っていない限り、それifはちょうど良いです。

于 2012-12-02T15:30:39.837 に答える
0

switch の場合、== は使用できません。値のみを使用してください。そうでない場合は、あなたの条件のために使用してください。

于 2012-12-02T15:19:42.447 に答える
-1

hwre は switch case の構文です

switch ( expression ) statement
labeled-statement:
case constant-expression : statement
default : statement

switch(exp)で式を渡す必要があることが明確に示されている
ため、そのままにすることはできません。

于 2012-12-02T15:27:54.887 に答える
-1

の全体的なポイントは、単一のswitch変数の値に基づいて何かを実行し、さらに、等しいかどうかのみをテストすることです。あなたの場合、一連のs を使用できます。else-if

if (x==1 && y==1) {
    // do something
} else if (x==3 && y==-1) {
    // do something
} else if (x==0 && y==3) {
    // do something
} else {
    // do something (default)
}
于 2012-12-02T15:26:51.477 に答える