「if」文が多すぎますか? 質問する

「if」文が多すぎますか? 質問する

次のコードは、必要なとおりに動作しますが、見苦しかったり、過剰だったり、その他の問題がいくつかあります。数式を調べて、いくつかのソリューションを記述しようとしましたが、最終的には同様の数のステートメントになります。

この場合に役立つ数式の種類はありますか、それとも 16 個の if ステートメントが許容されますか?

コードを説明すると、これは一種の同時ターンベースのゲーム用です。2 人のプレーヤーはそれぞれ 4 つのアクション ボタンを持ち、結果は配列 (0 ~ 3) から取得されますが、変数 'one' と 'two' には、役立つ場合は任意の値を割り当てることができます。結果は、0 = どちらも勝利しない、1 = p1 が勝利、2 = p2 が勝利、3 = 両方が勝利です。

public int fightMath(int one, int two) {

    if(one == 0 && two == 0) { result = 0; }
    else if(one == 0 && two == 1) { result = 0; }
    else if(one == 0 && two == 2) { result = 1; }
    else if(one == 0 && two == 3) { result = 2; }
    else if(one == 1 && two == 0) { result = 0; }
    else if(one == 1 && two == 1) { result = 0; }
    else if(one == 1 && two == 2) { result = 2; }
    else if(one == 1 && two == 3) { result = 1; }
    else if(one == 2 && two == 0) { result = 2; }
    else if(one == 2 && two == 1) { result = 1; }
    else if(one == 2 && two == 2) { result = 3; }
    else if(one == 2 && two == 3) { result = 3; }
    else if(one == 3 && two == 0) { result = 1; }
    else if(one == 3 && two == 1) { result = 2; }
    else if(one == 3 && two == 2) { result = 3; }
    else if(one == 3 && two == 3) { result = 3; }

    return result;
}

ベストアンサー1

数式を思いつかない場合は、次のような限られた数の結果に対して表を使用できます。

final int[][] result = new int[][] {
  { 0, 0, 1, 2 },
  { 0, 0, 2, 1 },
  { 2, 1, 3, 3 },
  { 1, 2, 3, 3 }
};
return result[one][two];

おすすめ記事