次のコードは、必要なとおりに動作しますが、見苦しかったり、過剰だったり、その他の問題がいくつかあります。数式を調べて、いくつかのソリューションを記述しようとしましたが、最終的には同様の数のステートメントになります。
この場合に役立つ数式の種類はありますか、それとも 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];