1. グー vs チョキ → 勝ち
  2. チョキ vs パー → 勝ち
  3. パー vs グー → 勝ち
  4. グー vs パー → 負け
  5. チョキ vs グー → 負け
  6. パー vs チョキ → 負け
  7. グー vs グー → 引き分け
  8. チョキ vs チョキ → 引き分け
コース一覧
Java入門:基礎文法編
じゃんけんの勝敗判定

Java入門:基礎文法編

変数、制御構文、メソッド、クラス、継承、インターフェースなど Java とオブジェクト指向の基礎を、コードを書きながら学べる無料コースです。プログラミング初学者や、業務システム開発で Java を扱う必要がある社会人を対象としています。約 17 時間 (1 日 30 分 × 34 日) で 69 レッスンを修了でき、修了後は Spring などのフレームワーク学習や Java 認定試験への準備が無理なく進められます。

1
Hello, Java
01. はじめての Java プログラム5分
02. 複数行の出力5分
03. 変数を使った自己紹介5分
04. コメントを書く5分
05. 第 1 章まとめクイズ5分
2
変数と演算
01. 変数を宣言する5分
02. データ型の使い分け5分
03. 変数とデータ型クイズ5分
04. 四則演算と剰余5分
05. 税込価格を計算する5分
06. インクリメントとデクリメント5分
07. 比較演算子5分
08. 論理演算子5分
09. 演算子の優先順位5分
10. 文字列の連結5分
11. 型変換 (キャスト)5分
12. 第 2 章 まとめクイズ5分
3
条件分岐
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分
4
繰り返し
01. for 文の基本5分
02. 1 から N までの合計5分
03. 九九の段を作る5分
04. while 文5分
05. カウントダウン5分
06. do-while 文5分
07. 二重ループ5分
08. break と continue5分
09. FizzBuzz 完成5分
10. 繰り返しクイズ5分
11. 第 4 章 まとめクイズ5分
5
メソッド
01. メソッドを定義する5分
02. 引数を受け取るメソッド5分
03. 戻り値を返す5分
04. 複数の引数を取るメソッド5分
05. メソッドのオーバーロード5分
06. メソッドクイズ5分
07. BMI を計算するメソッド5分
08. 第 5 章 まとめクイズ5分
6
配列
01. 配列の基本5分
02. 配列の要素にアクセス5分
03. 配列を for で走査5分
04. Javaで配列の合計・平均を求める方法(forループ)5分
05. 配列の平均5分
06. 配列の最大値5分
07. 配列の線形探索12分
08. 拡張 for ループ5分
09. 配列クイズ5分
10. 第 6 章 まとめクイズ5分
7
クラスとオブジェクト
01. クラスを定義する5分
02. クラスにフィールドを持たせる12分
03. クラスにメソッドを定義する5分
04. インスタンスを作る5分
05. コンストラクタ5分
06. this キーワード5分
07. カプセル化 (private と getter)12分
08. Person クラスを作る5分
09. Product クラスで税込価格15分
10. 銀行口座クラス15分
11. toString のオーバーライド5分
12. クラスとオブジェクト クイズ5分
13. Java 入門 最終クイズ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) の三すくみで、同じ手なら引き分け

入出力例

janken(0, 1) → "win" janken(1, 2) → "win" janken(2, 0) → "win" janken(0, 2) → "lose" janken(1, 0) → "lose" janken(2, 1) → "lose" janken(0, 0) → "draw" janken(1, 1) → "draw"

ヒント

まず `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 択クイズで総復習する章末まとめ。

  • for 文の基本

    決まった回数を繰り返したいときの相棒、for 文を学ぼう。初期化・条件・更新の 3 つの式の意味を理解する。

  • メソッドを定義する

    Java の処理をまとめて名前を付ける仕組み、メソッドの定義と呼び出しを学ぼう。

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

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

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

メモ

じゃんけんの勝敗判定

⌘S で保存