Skip to main content

条件分岐

この章で得られるスキル:

  • ✅ 状況に応じて異なる処理を実行できる
  • ✅ ユーザーの入力に応じた柔軟なプログラムが作れる
  • ✅ 複雑な条件を組み合わせられる
  • ✅ 実務でよく使うif文のパターンを理解できる

Step 0: まず体験してみよう

説明の前に、まず 条件分岐がないと何が困るのか を体験しよう。

シナリオ:SNSの「いいね」機能を作りたい

SNSアプリで、投稿に「いいね」を押す機能を作るとしよう。

仕様:

  • いいね数が0のとき:「まだいいねがありません」
  • いいね数が1〜99のとき:「XX人がいいねしました」
  • いいね数が100以上のとき:「100人以上がいいねしました」

実行してみよう(条件分岐なし):

public class Main { public static void main(String[] args) { int likes = 5; // 条件分岐がないと... // いいね数に関わらず、同じメッセージしか表示できない System.out.println("いいねがあります"); // これでは困る! // いいね数が0でも100でも同じメッセージ... } }

問題点:

  • いいね数が何個でも、同じメッセージしか出せない
  • ユーザーに正確な情報を伝えられない
  • アプリとして役に立たない

どうすればいいのか?

→ 条件によって処理を変える 条件分岐 が必要!


Step 1: if文で解決する

同じプログラムを、 if文 で書き直してみよう。

public class Main { public static void main(String[] args) { int likes = 5; // if文を使うと... if (likes == 0) { System.out.println("まだいいねがありません"); } if (likes >= 1 && likes <= 99) { System.out.println(likes + "人がいいねしました"); } if (likes >= 100) { System.out.println("100人以上がいいねしました"); } } }

何が起きたか?

  1. likes = 5なので、2番目の条件(likes >= 1 && likes <= 99)が真(true)
  2. 2番目のブロックだけが実行される
  3. 「5人がいいねしました」と表示される

試してみよう:

  • likesを0に変えて実行 → 「まだいいねがありません」
  • likesを150に変えて実行 → 「100人以上がいいねしました」
重要な気づき

変数の値を変えるだけで、プログラムの動作が変わる! これが条件分岐の威力である。


Step 2: if文の仕組みを理解しよう

if文の基本形

if (条件式) {
// 条件が真(true)のときに実行される処理
}

各部分の説明:

if (likes >= 100) {
// ↑ 条件式:trueかfalseを返す
System.out.println("100人以上");
// ↑ ブロック:条件が真のときに実行
}

条件式とは?

条件式 は、 真(true)か偽(false)を返す式 のこと。

よく使う比較演算子:

演算子意味結果
==等しい5 == 5true
!=等しくない5 != 3true
>より大きい10 > 5true
<より小さい3 < 10true
>=以上5 >= 5true
<=以下3 <= 5true

実行してみよう:

public class Main { public static void main(String[] args) { int score = 85; System.out.println("現在の点数: " + score); System.out.println("---"); // いろいろな条件を試してみよう if (score >= 80) { System.out.println("80点以上です!"); } if (score == 100) { System.out.println("満点です!"); } if (score < 60) { System.out.println("もっと頑張りましょう"); } System.out.println("---"); System.out.println("プログラム終了"); } }

やってみよう:

  • scoreを100にして実行 → 「満点です!」が追加で表示される
  • scoreを50にして実行 → どのメッセージが表示されるか確認しよう

Step 3: if-else文で「それ以外」を扱う

問題:コードが重複している

先ほどの「いいね」の例を見返してみよう:

if (likes == 0) {
System.out.println("まだいいねがありません");
}

if (likes >= 1 && likes <= 99) {
System.out.println(likes + "人がいいねしました");
}

if (likes >= 100) {
System.out.println("100人以上がいいねしました");
}

3つのif文を書いているが、 実行されるのは常に1つだけ である。 もっと効率的な書き方がある。

if-else文で書き直す

if-else文 は、「条件が真のとき」と「それ以外」を明確に分ける。

if (条件式) {
// 条件が真のときの処理
} else {
// 条件が偽のときの処理
}

実行してみよう:

public class Main { public static void main(String[] args) { int temperature = 28; System.out.println("現在の気温: " + temperature + "度"); // if-else文 if (temperature >= 30) { System.out.println("暑いです!エアコンをつけましょう"); } else { System.out.println("快適な気温です"); } // 別の例:偶数・奇数判定 int number = 7; System.out.println("---"); System.out.println("数値: " + number); if (number % 2 == 0) { System.out.println("偶数です"); } else { System.out.println("奇数です"); } } }

やってみよう:

  1. temperatureを35に変えて実行
  2. numberを8に変えて実行
  3. 偶数・奇数の判定がどう変わるか確認しよう

視覚的に理解しよう

実行の流れ(temperature = 28の場合):


Step 4: if-else if-elseで複数の条件を扱う

シナリオ:成績判定システム

テストの点数に応じて、評価を出すプログラムを作ろう。

仕様:

  • 90点以上:「優」
  • 70〜89点:「良」
  • 60〜69点:「可」
  • 60点未満:「不可」

if-else if-elseの書き方

if (条件1) {
// 条件1が真のときの処理
} else if (条件2) {
// 条件1が偽で、条件2が真のときの処理
} else if (条件3) {
// 条件1と2が偽で、条件3が真のときの処理
} else {
// すべての条件が偽のときの処理
}
重要

条件は 上から順番に チェックされ、 最初に真になった条件のブロックだけが実行される。 それ以降の条件はチェックされない。

実行してみよう:

public class Main { public static void main(String[] args) { int score = 75; System.out.println("テスト結果: " + score + "点"); System.out.print("評価: "); if (score >= 90) { System.out.println("優(素晴らしい!)"); } else if (score >= 70) { System.out.println("良(よくできました)"); } else if (score >= 60) { System.out.println("可(合格です)"); } else { System.out.println("不可(もう少し頑張りましょう)"); } // ゲームの例:HPに応じたメッセージ System.out.println("---"); int hp = 30; int maxHp = 100; System.out.println("HP: " + hp + "/" + maxHp); System.out.print("状態: "); if (hp == 0) { System.out.println("戦闘不能"); } else if (hp <= maxHp * 0.2) { System.out.println("危険!(赤)"); } else if (hp <= maxHp * 0.5) { System.out.println("注意(黄)"); } else { System.out.println("安全(緑)"); } } }

やってみよう:

  1. scoreを95、65、50に変えて、それぞれどの評価になるか確認
  2. hpを0、15、60、80に変えて、状態がどう変わるか確認

実行の流れを追ってみよう

score = 75の場合の処理の流れ:

ポイント

最初に真になった条件で処理が終わるので、 条件の順序が重要 である。 if-else文は2つの分岐だが、if-else if-elseは3つ以上の分岐を扱える。


Step 5: 複雑な条件を作る

論理演算子で条件を組み合わせる

論理演算子:

演算子意味読み方
&&かつ(AND)age >= 18 && hasLicense「年齢が18以上 かつ 免許を持っている」
||または(OR)day == 6 || day == 7「曜日が6 または 7」
!でない(NOT)!isRaining「雨が降って いない

実行してみよう:

public class Main { public static void main(String[] args) { // SNSの投稿可否判定 int age = 20; boolean isLoggedIn = true; boolean hasVerifiedEmail = true; System.out.println("投稿可否チェック"); System.out.println("年齢: " + age); System.out.println("ログイン状態: " + isLoggedIn); System.out.println("メール認証: " + hasVerifiedEmail); System.out.println("---"); // 複数の条件をANDで組み合わせる if (age >= 13 && isLoggedIn && hasVerifiedEmail) { System.out.println("✓ 投稿できます"); } else { System.out.println("✗ 投稿できません"); // 詳しい理由を表示 if (age < 13) { System.out.println(" 理由: 年齢が足りません"); } if (!isLoggedIn) { System.out.println(" 理由: ログインしてください"); } if (!hasVerifiedEmail) { System.out.println(" 理由: メールアドレスを認証してください"); } } // 週末判定(ORの例) System.out.println("---"); int dayOfWeek = 6; // 1=月曜, ..., 6=土曜, 7=日曜 if (dayOfWeek == 6 || dayOfWeek == 7) { System.out.println("今日は週末です!"); } else { System.out.println("今日は平日です"); } } }

やってみよう:

  1. ageを12にして実行 → 理由が表示される
  2. isLoggedInfalseにして実行 → 別の理由が表示される
  3. dayOfWeekを3にして実行 → 「平日です」になる

Step 6: switch文で値による分岐

switch文とは?

switch文 は、変数の値によって処理を分岐させる構文。 特定の値による分岐が多い場合、if-else if-elseよりも見やすい。

基本的な書き方

switch (変数) {
case1:
// 変数が値1のときの処理
break;
case2:
// 変数が値2のときの処理
break;
default:
// どの値にも一致しないときの処理
break;
}
重要

break文 を忘れると、次のcaseも実行されてしまう(フォールスルー)。 必ずbreakを書こう。

実行してみよう:

public class Main { public static void main(String[] args) { // ゲームのコマンド処理 int command = 2; System.out.println("コマンド入力: " + command); System.out.print("実行: "); switch (command) { case 1: System.out.println("攻撃!"); break; case 2: System.out.println("防御!"); break; case 3: System.out.println("魔法を使う!"); break; case 4: System.out.println("逃げる!"); break; default: System.out.println("無効なコマンドです"); break; } // 複数のcaseをまとめる例 System.out.println("---"); int month = 8; System.out.print(month + "月は"); switch (month) { case 3: case 4: case 5: System.out.println("春です"); break; case 6: case 7: case 8: System.out.println("夏です"); break; case 9: case 10: case 11: System.out.println("秋です"); break; case 12: case 1: case 2: System.out.println("冬です"); break; default: System.out.println("無効な月です"); break; } } }

やってみよう:

  1. commandを1〜5に変えて、それぞれの動作を確認
  2. monthを12、4、9に変えて、季節判定を確認
  3. 挑戦: いずれかのbreakを削除して、フォールスルーの動作を確認してみよう

Step 7: 実践演習

以下の課題に挑戦して、条件分岐をマスターしよう!

課題1:パスワード強度チェッカー

パスワードの長さに応じて、強度を判定するプログラムを作ろう。

仕様:

  • 8文字未満:「弱い」
  • 8〜11文字:「普通」
  • 12文字以上:「強い」

ヒント:

String password = "mypassword";
int length = password.length(); // 文字列の長さを取得

スタート地点:

public class Main { public static void main(String[] args) { String password = "mypassword"; int length = password.length(); System.out.println("パスワード: " + password); System.out.println("文字数: " + length); System.out.print("強度: "); // ここにif-else if-elseを書こう! } }

課題2:BMI判定プログラム

身長と体重からBMIを計算し、判定結果を表示するプログラムを作ろう。

BMI計算式:

BMI = 体重(kg) ÷ (身長(m) × 身長(m))

判定基準:

  • 18.5未満:やせ
  • 18.5〜24.9:標準
  • 25〜29.9:肥満(1度)
  • 30以上:肥満(2度)

ヒント:

double height = 1.70;  // メートル単位
double weight = 65.0; // キログラム
double bmi = weight / (height * height);

課題3:じゃんけんゲーム

プレイヤーとコンピュータのじゃんけんの結果を判定しよう。

仕様:

  • 1 = グー、2 = チョキ、3 = パー
  • 勝敗を判定して表示する

ヒント:

int player = 1;    // プレイヤーの手
int computer = 2; // コンピュータの手

// switch文やif文を使って判定しよう!
// 例:player == 1 && computer == 2 なら「あなたの勝ち」

まとめ

この章では、 条件分岐 について学んだ。

🎯 達成できたこと

  • 状況に応じて異なる処理を実行できるようになった
  • ユーザーの入力に応じた柔軟なプログラムが作れるようになった
  • 複雑な条件を組み合わせられるようになった
  • 実務でよく使うif文のパターンを理解できた

📚 学んだ構文

構文使いどころ
if文条件が真のときだけ処理を実行
if-else文「条件が真のとき」と「それ以外」で処理を分ける
if-else if-else複数の条件を順番にチェック
switch文値による分岐が多い場合

🚀 次のステップ

次の章では、 繰り返し(for文、while文)について学ぶ。

条件分岐と繰り返しを組み合わせることで、さらに強力なプログラムを作れるようになる:

// 例:1から10までの偶数だけを表示
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) { // 条件分岐と繰り返しの組み合わせ!
System.out.println(i);
}
}

💡 よくある質問

Q1: if文とswitch文、どっちを使えばいい?

A: 以下を目安に選ぼう:

  • 値による分岐が多い → switch文が見やすい
  • 範囲で判定する → if文を使う(switch文では範囲指定ができない)
  • 複雑な条件 → if文を使う

Q2: なぜbreakを忘れるとダメなの?

A: break文がないと、次のcaseも実行されてしまう(フォールスルー)。

switch (value) {
case 1:
System.out.println("1");
// breakがない!
case 2:
System.out.println("2"); // valueが1でも実行される
break;
}

Q3: elseは省略できる?

A: できる。「それ以外」の処理が不要なら、elseは書かなくてOK。

if (score >= 90) {
System.out.println("優秀です");
}
// elseなし - 90点未満のときは何も表示しない

演習

条件分岐の目的として最も適切なものを選べ。

正解

C. 条件によって実行する処理を切り替えること

解説

条件分岐 とは、ある条件が成り立つかどうかによって、実行する処理を切り替える仕組みである。Javaではif文やswitch文を使って条件分岐を実現する。繰り返しはループ(for文やwhile文)の役割である。

Javaのif文の構文として正しいものを選べ。

正解

C. `if (条件式) { 処理; }`

解説

Javaのif文では、条件式を 丸括弧 () で囲む必要がある。これはJavaの構文規則であり、括弧を省略したり角括弧を使ったりするとコンパイルエラーになる。

if-else文とif-else if文の違いについて、正しい説明を選べ。

正解

C. if-elseは2つの分岐、if-else ifは3つ以上の分岐ができる

解説

if-else文は「条件が成り立つ場合」と「成り立たない場合」の 2つに分岐 する。if-else if文は、複数の条件を順番に評価して 3つ以上の分岐 を実現できる。どちらも一度の判定で1つの処理ブロックだけが実行される。

switch文の使用が最も適切な場面を選べ。

switch文は 値の一致 を判定する。大小比較(>, <)や複雑な条件式はif文の方が適している。

正解

C. 1つの変数の値が複数の固定値のどれに一致するかで処理を分ける場合

解説

switch文は、1つの変数の値が特定の値に一致するかを判定するのに適している。case 1:, case 2: のように固定値との一致を判定する場面で使う。一方、大小比較(age >= 18)や複雑な条件(&&, ||)を使う場合はif文の方が適切である。

以下のコードの空欄を埋めて、点数が80点以上のときに「合格」と表示するプログラムを完成させよ。

int score = 85; if (
) { System.out.println("合格"); }

解答例
score >= 80
解説

if文の条件式には 比較演算子 を使う。「80点以上」は score >= 80 と書く。>= は「以上」を意味する比較演算子である。

以下のコードの空欄を埋めて、数値が正のときに「正の数」、それ以外のときに「正の数ではない」と表示するプログラムを完成させよ。

int number = -3; if (number > 0) { System.out.println("正の数"); }
{ System.out.println("正の数ではない"); }

解答例
else
解説

if-else文は、条件が成り立つ場合と成り立たない場合の2つの処理を切り替える。else ブロックはif文の条件が false のときに実行される。else の後に条件式は書かない。

以下のコードの空欄を埋めて、点数に応じてA〜Cの評価を表示するプログラムを完成させよ。

int score = 75; if (score >= 80) { System.out.println("A"); }
(score >= 60) { System.out.println("B"); }
{ System.out.println("C"); }

解答例
else if / else
解説

3つ以上の分岐をするには else if を使う。条件は上から順に評価され、最初に true になったブロックだけが実行される。どの条件にも当てはまらない場合は else ブロックが実行される。

以下の要件を満たすプログラムを完成させよ。

要件

  • 変数 age が18以上 かつ 変数 hasTickettrue のとき、「入場できます」と表示する
  • それ以外のとき、「入場できません」と表示する
public class Main { public static void main(String[] args) { int age = 20; boolean hasTicket = true; // ここにif-else文を書いてください } }

ポイント: && は「かつ(AND)」を意味する論理演算子である。2つの条件を両方満たす場合に true になる。

解説

解答例

if (age >= 18 && hasTicket) {
    System.out.println("入場できます");
} else {
    System.out.println("入場できません");
}

&&(AND演算子)は左辺と右辺の両方が true の場合のみ全体が true になる。boolean 型の変数は == true を省略して直接条件に使える。

以下のコードの空欄を埋めて、曜日番号に応じた曜日名を表示するプログラムを完成させよ。

int day = 3;
(day) { case 1: System.out.println("月曜日");
; case 2: System.out.println("火曜日"); break; case 3: System.out.println("水曜日"); break;
: System.out.println("不明"); break; }

解答例
switch / break / default
解説

switch文は変数の値に応じて処理を分岐する。switch(変数) で対象を指定し、case 値: で一致する処理を記述する。break でswitch文を抜け、default はどのcaseにも一致しない場合に実行される。

switch文でbreakを書かなかった場合、どのような動作になるか。最も適切なものを選べ。

breakがない場合の動作を フォールスルー と呼ぶ。case 2に一致した場合、case 3以降の処理も順番に実行される。

正解

B. 一致したcaseから以降のcaseの処理もすべて実行される

解説

switch文でbreakを省略すると、一致したcaseの処理が実行された後、次のcaseの処理もそのまま実行される。これを フォールスルー(fall-through) と呼ぶ。意図しないフォールスルーはバグの原因となるため、各caseの末尾にbreakを書くのが基本である。

以下のJavaコードを実行した場合、何が出力されるか。

int x = 15;

if (x > 20) {
System.out.println("A");
} else if (x > 10) {
System.out.println("B");
} else {
System.out.println("C");
}

正解

B. B

解説

変数 x の値は15である。

  1. x > 2015 > 20false → Aは出力されない
  2. x > 1015 > 10trueBが出力される

else ifは上から順に評価され、最初にtrueになった条件のブロックだけが実行される。x > 10 がtrueなので、elseブロックは実行されない。

以下の要件を満たすプログラムを完成させよ。

要件

  • 変数 score の値に応じて、以下のように評価を表示する
    • 90点以上:「優」
    • 70点以上90点未満:「良」
    • 50点以上70点未満:「可」
    • 50点未満:「不可」
public class Main { public static void main(String[] args) { int score = 75; // ここにif-else if-else文を書いてください } }

if-else if-else文を使って上から順に条件を絞り込んでいこう。score >= 90 から始めると、else if以降では自動的に90未満が保証される。

解説

解答例

if (score >= 90) {
    System.out.println("優");
} else if (score >= 70) {
    System.out.println("良");
} else if (score >= 50) {
    System.out.println("可");
} else {
    System.out.println("不可");
}

if-else if文では条件を上から順に評価するため、score >= 70 の時点ですでに score < 90 が保証されている。このように条件を絞り込むことで、シンプルに書ける。

以下のJavaコードを実行した場合、何が出力されるか。

int x = 15;

if (x > 10) {
System.out.println("A");
}
if (x > 5) {
System.out.println("B");
}
if (x > 20) {
System.out.println("C");
}

正解

B. AとB

解説

このコードには 独立した3つのif文 がある。else ifではないため、各if文はそれぞれ独立して条件を評価する。

  1. x > 1015 > 10trueAが出力される
  2. x > 515 > 5trueBが出力される
  3. x > 2015 > 20false → Cは出力されない

独立したif文は すべての条件が個別に評価 される点がポイントである。

以下のJavaコードを実行した場合、何が出力されるか。

int x = 15;

if (x > 10) {
System.out.println("A");
} else if (x > 5) {
System.out.println("B");
} else if (x > 20) {
System.out.println("C");
}

正解

B. Aのみ

解説

このコードは if-else if で連結されている。else ifの場合、上から順に条件を評価し、最初にtrueになった条件のブロックだけ が実行される。

  1. x > 1015 > 10trueAが出力される
  2. 最初の条件がtrueだったので、以降のelse ifは 評価されない

独立したif文(前の問題)とは異なり、else ifでは1つの条件が成り立った時点で残りはスキップされる。

以下の2つのコードについて、出力結果の違いとして正しいものを選べ。

コードA(独立if文):

int n = 30;
if (n >= 10) { System.out.print("X"); }
if (n >= 20) { System.out.print("Y"); }
if (n >= 30) { System.out.print("Z"); }

コードB(if-else if文):

int n = 30;
if (n >= 10) { System.out.print("X"); }
else if (n >= 20) { System.out.print("Y"); }
else if (n >= 30) { System.out.print("Z"); }

独立したif文は すべての条件を個別に評価 する。if-else ifは 最初にtrueになった条件のブロックだけ を実行する。n=30のとき、各条件がtrueかfalseかを1つずつ確認してみよう。

正解

C. コードA: XYZ、コードB: X

解説

コードC(独立if文): 3つのif文はそれぞれ独立しているため、すべての条件が評価される。n=30なので n >= 10, n >= 20, n >= 30 はすべてtrue → XYZ が出力される。

コードB(if-else if文): 最初の n >= 10 がtrueなので「X」が出力され、残りのelse ifは評価されない → X のみ出力される。

この違いを理解することは、バグを防ぐ上で非常に重要である。

以下のコードの空欄を埋めて、数値が偶数かどうかを判定するプログラムを完成させよ。

int number = 8; if (
) { System.out.println("偶数です"); }

解答例
number % 2 == 0
解説

偶数の判定には 剰余演算子 % を使う。number % 2 は「numberを2で割った余り」であり、偶数であれば余りは0になる。したがって number % 2 == 0 が偶数判定の条件式となる。

以下のコードの空欄を埋めて、点数に応じた評価を表示するプログラムを完成させよ。

  • 80点以上:「A」
  • 60点以上80点未満:「B」
  • 60点未満:「C」
int score = 72; if (
) { System.out.println("A"); } else if (
) { System.out.println("B"); } else { System.out.println("C"); }

解答例
score >= 80 / score >= 60
解説

if-else if文では上から順に条件が評価されるため、2番目の条件 score >= 60 は、すでに score < 80 が保証されている(最初のifでfalseだったため)。したがって「60以上かつ80未満」を明示的に書く必要はない。

以下のJavaコードを実行した場合、何が出力されるか。

int num = 2;

switch (num) {
case 1:
System.out.println("A");
case 2:
System.out.println("B");
case 3:
System.out.println("C");
break;
default:
System.out.println("D");
}

breakがない場合、switch文では フォールスルー が発生する。case 2に一致した後、breakが見つかるまで次のcaseの処理も実行される。

正解

B. BとC

解説

num は2なので case 2 に一致し、「B」が出力される。しかし case 2 の後にbreakがないため、フォールスルー が発生し、次の case 3 の処理も実行されて「C」が出力される。case 3 の後にはbreakがあるため、ここでswitch文を抜ける。

case処理break
case 1スキップ-
case 2「B」出力なし(フォールスルー)
case 3「C」出力あり(ここで抜ける)
default実行されない-