当ページのリンクには広告が含まれています。仕事で2進数を使った判定処理について学んだので共有したくて執筆しました。仕事上で設計したロジックは本記事で紹介するものより複雑でしたが、本質的な部分は変わらないので使って頂けると思います。説明用にじゃんけんの判定ロジックを実装例としました。テストコードも作成しましたので、併せてご覧頂ければと思います。2進数についてはご存じである前提で進めさせていただきます。理解に不安がありましたら、以下のサイトがわかり易いので参照ください。仕様じゃんけんの判定は3人以上に対応できること。勝ったプレイヤーは勝ち数を保持すること。実装Handクラスじゃんけんの手を保持するクラスです。0b100;}じゃんけんの手2進数で表現しています。Playerクラスじゃんけんのプレイヤークラスです。じゃんけんの手と勝ち数を保持します。_winCount++;}}notifyResultメソッド進行役から勝ちを宣言された場合、自身の勝ち数を1つ増やします。GameMasterクラスじゃんけんゲームの進行役です。じゃんけんの結果を判定します。0;}}judgeメソッドプレイヤー全員の手をビットフラグでresult変数に保持します。全員が違う手を出せば、0b111になります。勝った手を出したプレイヤーには、勝ち数を増やすように勝ちを通知します。winHandメソッドじゃんけんした結果がいずれかの勝ちパターンになる場合、勝ちになる手を返します。誰も勝っていない場合、0を返すことで誰も勝ち判定になりません。プレイヤーの人数がどれだけ増えても、result変数の結果が和集合で集約されるだけなので、判定するプレイヤーの手をequalsで判定したりする必要が無く、非常にシンプルになります!テストコードTestGameMaster主に進行役(GameMasterクラス)のじゃんけん判定(judgeメソッド)のテストコードです。プレイヤーが2人の場合と3人の場合でテストケースを作成しています。drow_all_mismatch));}}自分の手を決めるHandクラスの手がプレイヤーに正しくセットされたかをテストしています。じゃんけんの結果を判定する_2人テストデータとして、勝つ方と負ける方のプレイヤーがいます。勝つ方のプレイヤーの勝ち数が増えていることで動作の正当性をテストしています。じゃんけんの結果を判定する_3人3人いる場合、引き分けが2パターンと勝ちが2パターンあります。:1人だけ勝つ、または2人が勝つこれらも、プレイヤーの勝ち数を数えることで動作の正当性をテストしています。※プレイヤーが4人、5人と増えても試験のパターンは3人の場合と基本的に変わらないので実施していません。まとめ2進数を使うと最終的な結果である和集合(論理和)で判定が容易にできる。テストコードを書くことで、ロジックの正当性を試験できる。じゃんけんよかったらシェアしてね!URLをコピーしました!URLをコピーしました!【Java】HashSet、LinkedHashSet、TreeSetの違いプログラミングを上達させるために私がやってきたこと・やっていることこの記事を書いた人ログログリーマンショックの影響で26歳の時にIT業界から離れ、紆余曲折を経て34歳でエンジニアに復帰しました。復帰前は開発未経験でしたが、独学した知識と面接時のコミュニケーション力で見事開発エンジニアとして復帰しました!今はフリーランスエンジニアとして仕事をしています。※サイト上に表示された文字を入力してください。■運営者プロフィールIT業界10年のエンジニア。Javaを経験してきました。時々フロントもやってたり。今はJavaメインのフリーランスエンジニアです。