コース一覧
    Java入門:条件分岐
    じゃんけんの勝敗判定

    Java入門:条件分岐

    条件分岐の書き方を学び、入力や条件に応じて処理を選べるプログラムを作れるようにします。

    1
    条件分岐
    01. if 文の基本5分
    02. if-else 文5分
    03. else if で複数分岐5分
    04. 成績判定プログラム12分
    05. うるう年を判定する5分
    06. switch 文5分
    07. 三項演算子5分
    08. じゃんけんの勝敗判定15分
    09. FizzBuzz の判定部分5分
    10. 第 3 章 まとめクイズ5分

    じゃんけんの勝敗判定

    見る変数が 2 つになると、条件が急に難しくなる

    if と else は 2 つにしか分けられません。じゃんけんの結果は勝ち・負け・引き分けの 3 つあり、しかも「勝ち」は自分の手と相手の手の 組み合わせ で決まります。片方の値だけを見ても答えが出ない、というのがここまでとの違いです。

    こういうときは、いちばん簡単に片付く条件から順に潰していきます。

    先に片付く条件から return する

    2 つの値を比べて 3 通りの答えを返す形を、数の大小で見てみます。

    Java

    public class Compare {
        public static String judge(int a, int b) {
            if (a == b) {
                return "same";
            }
            if (a > b) {
                return "big";
            }
            return "small";
        }
    }

    else が 1 つも出てきません。return に届いた時点でメソッドが終わるので、その下の行は「まだ答えが決まっていない場合」だけが通ります。だから if を並べるだけで、上から順に絞り込めます。この書き方を早期 return と呼びます。

    先頭に置くのは、1 行で書けて、残りを大きく減らす条件 です。この例なら a == b がそれで、これを片付けてしまえば残りは 2 通りしかありません。最後の return は「ここまで全部外れた場合」の受け皿になるので、条件を書く必要がありません。

    「両方そろって」と「どちらかでよい」を取り違える

    組み合わせで決まる条件は && で書きます。&& は左右の両方が true のときだけ true になります。

    Java

    if (day == 6 && weather == 0) {
        return "洗濯日和";
    }

    ここを 1 文字変えるだけで、条件はまったく別のものに化けます。

    Java

    if (day == 6 || weather == 0) {   // 土曜なら天気は何でもよい

    文法としては正しいのでコンパイルは通り、エラーも出ません。テストの一部だけが落ちて、原因を探し回ることになります。

    条件を書いたら「この 2 つは同時に成り立つ必要があるのか、片方でよいのか」と声に出して読み直してください。それだけで取り違えのほとんどは防げます。

    解説

    戻り値の文字列の綴り違いも地味に多い失敗です。"lose" を "loose" と書くと、判定が完璧でもテストは落ちます。

    やってみよう

    janken(int me, int opponent) を完成させてください。手はグーが 0、チョキが 1、パーが 2 で、返すのは "win" "lose" "draw" の 3 つです。

    1. 紙に表を書いて、自分が勝つ組み合わせを全部書き出す
    2. 1 行で片付く条件から先に return する
    3. 勝ちの組み合わせを && で書き、どれにも当たらなかったときの答えを最後に置く
    4. 実行して 5 件のテストを通す

    最初に書き出す表は 3 行で足ります。ここが 2 行で止まっていると、その組み合わせだけ結果が反転し、しかもテストは他が通るので気づきにくくなります。書き始める前に、行数を数えてください。

    要件

    1. クラス名は Solution、メソッド名は janken、引数は int me, int opponent の 2 つにすること
    2. 戻り値の型は String で、勝ちなら "win"、負けなら "lose"、引き分けなら "draw" を返すこと
    3. ルールは グー (0) > チョキ (1) > パー (2) > グー (0) の三すくみで、同じ手なら引き分け

    ヒント

    まず `if (me == opponent)` で引き分けを判定して `return "draw";` してしまうと、残りは勝ちと負けだけになるので考えやすくなります

    勝ちパターンは `(me == 0 && opponent == 1)`、`(me == 1 && opponent == 2)`、`(me == 2 && opponent == 0)` の 3 通りです。`&&` は **両方とも `true`** のときに成り立ちます

    `(me + 1) % 3 == opponent` という 1 行で勝ち判定ができる別解もあります。`%` は剰余 (割った余り) を返す演算子です

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2025/12/19·更新 2026/08/26

    関連レッスン

    • FizzBuzz の判定部分

      プログラマー面接の定番問題 FizzBuzz の中核となる判定ロジックを、if-else if-else と剰余演算で組み立てよう。

    • 第 3 章 まとめクイズ

      第 3 章で学んだ if / else if / switch / 三項演算子 / うるう年 / FizzBuzz を 1 問の 4 択クイズで総復習する章末まとめ。

    • 三項演算子

      Java の三項演算子 `条件 ? 真の値 : 偽の値` を使って、if-else を 1 行で書けるようになろう。

    • switch 文

      値による多分岐を簡潔に書く switch 文を学び、case と break、default の使い方をマスターしよう。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 変数データに名前をつけて参照する仕組み
    • メソッドクラスに属する関数
    • コンパイルソースをバイトコードへ変換する処理
    • テストバグを見つける工程
    • 戻り値呼び出し元への返答を表す点線矢印
    • クラスデータと振る舞いを束ねる単位
    • 引数位置引数=順番で渡す。
    main.java
    エディタを読み込んでいます

    メモ

    じゃんけんの勝敗判定

    ⌘S で保存