1. ホーム
  2. if-statement

[解決済み】「if」文が多すぎる?

2022-04-02 01:42:23

質問

以下のコードは必要な動作をするのですが、醜かったり、過剰だったりと、いろいろと問題があります。数式を見たり、いくつかの解決策を書こうとしましたが、結局同じような量のステートメントになってしまいます。

このような場合に役立つ数学の公式の種類はありますか、それとも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;
}

解決方法は?

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

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];