[解決済み】「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];
関連
-
[解決済み】if [](角括弧)の「[: 引数が多すぎる」エラーの意味)
-
[解決済み] OCamlにおける複数のif文の実装
-
[解決済み] 代入文の「others=>'0'」はどういう意味ですか?
-
[解決済み] SwiftのIF LETはどのように評価されるのですか?
-
[解決済み] SwiftのIF LETはどのように評価されるのですか?
-
[解決済み] AngularJS テンプレートにおける if else ステートメント
-
[解決済み] GoにはPythonのような "if x in "の構成がありますか?
-
[解決済み】「if x: return x」文を回避するためのPythonicな方法
-
[解決済み] Swiftでif文の中で複数のlet-asを使用する
-
[解決済み] 条件Aを満たした場合、条件Bを満たさないと行動Cができない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] gitlabciでif-else条件を使用する方法
-
[解決済み] 中括弧のないif文を使用するのは悪い習慣ですか?[クローズド]
-
[解決済み] バッチファイル:(この時点では想定外でした
-
[解決済み] AngularJS テンプレートにおける if else ステートメント
-
[解決済み】C#や.NETで見た最も奇妙なコーナーケースは何ですか?[解決済み]
-
[解決済み】「if」文が多すぎる?
-
[解決済み] Swiftでif文の中で複数のlet-asを使用する
-
[解決済み] 条件Aを満たした場合、条件Bを満たさないと行動Cができない。
-
[解決済み] ワンライナーでif else文を書くには?重複
-
[解決済み] IF」は高いのか?