この章で得られるスキル:
✅ 状況に応じて異なる処理を実行できる
✅ ユーザーの入力に応じた柔軟なプログラムが作れる
✅ 複雑な条件を組み合わせられる
✅ 実務でよく使う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人以上がいいねしました");
}
}
}
何が起きたか?
likes = 5なので、2番目の条件(likes >= 1 && likes <= 99)が真(true)
2番目のブロックだけが実行される
「5人がいいねしました」と表示される
試してみよう:
likesを0に変えて実行 → 「まだいいねがありません」
likesを150に変えて実行 → 「100人以上がいいねしました」
変数の値を変えるだけで、プログラムの動作が変わる!
これが条件分岐の威力である。
Step 2: if文の仕組みを理解しよう
if文の基本形
各部分の説明:
if ( likes >= 100 ) { 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文 は、「条件が真のとき」と「それ以外」を明確に分ける。
実行してみよう:
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("奇数です");
}
}
}
やってみよう:
temperatureを35に変えて実行
numberを8に変えて実行
偶数・奇数の判定がどう変わるか確認しよう
視覚的に理解しよう
実行の流れ(temperature = 28の場合):
Step 4: if-else if-elseで複数の条件を扱う
シナリオ:成績判定システム
テストの点数に応じて、評価を出すプログラムを作ろう。
仕様:
90点以上:「優」
70〜89点:「良」
60〜69点:「可」
60点未満:「不可」
if-else if-elseの書き方
if ( 条件 1 ) { } else if ( 条件 2 ) { } else if ( 条件 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("安全(緑)");
}
}
}
やってみよう:
scoreを95、65、50に変えて、それぞれどの評価になるか確認
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("今日は平日です");
}
}
}
やってみよう:
ageを12にして実行 → 理由が表示される
isLoggedInをfalseにして実行 → 別の理由が表示される
dayOfWeekを3にして実行 → 「平日です」になる
Step 6: switch文で値による分岐
switch文とは?
switch文 は、変数の値によって処理を分岐させる構文。
特定の値による分岐が多い場合、if-else if-elseよりも見やすい。
基本的な書き方
switch ( 変数 ) { case 値 1 : break ; case 値 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;
}
}
}
やってみよう:
commandを1〜5に変えて、それぞれの動作を確認
monthを12、4、9に変えて、季節判定を確認
挑戦: いずれかの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 ;
まとめ
この章では、 条件分岐 について学んだ。
🎯 達成できたこと
✅ 状況に応じて異なる処理 を実行できるようになった
✅ ユーザーの入力に応じた柔軟なプログラム が作れるようになった
✅ 複雑な条件を組み合わせ られるようになった
✅ 実務でよく使うif文のパターン を理解できた
📚 学んだ構文
構文 使いどころ if文 条件が真のときだけ処理を実行 if-else文 「条件が真のとき」と「それ以外」で処理を分ける if-else if-else 複数の条件を順番にチェック switch文 値による分岐が多い場合
🚀 次のステップ
次の章では、 繰り返し (for文、while文)について学ぶ。
条件分岐と繰り返しを組み合わせることで、さらに強力なプログラムを作れるようになる:
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" ) ; case 2 : System . out . println ( "2" ) ; break ; }
Q3: elseは省略できる?
A: できる。「それ以外」の処理が不要なら、elseは書かなくてOK。
if ( score >= 90 ) { System . out . println ( "優秀です" ) ; }
条件分岐の目的として最も適切なものを選べ。
採点する 諦めて解答を表示する(達成済みステータスを外します)
解答・解説を見る
正解 C. 条件によって実行する処理を切り替えること
解説 条件分岐 とは、ある条件が成り立つかどうかによって、実行する処理を切り替える仕組みである。Javaではif文やswitch文を使って条件分岐を実現する。繰り返しはループ(for文やwhile文)の役割である。
Javaのif文の構文として正しいものを選べ。
採点する 諦めて解答を表示する(達成済みステータスを外します)
解答・解説を見る
解説 Javaのif文では、条件式を 丸括弧 () で囲む必要がある。これはJavaの構文規則であり、括弧を省略したり角括弧を使ったりするとコンパイルエラーになる。
問題3. if-elseとif-else ifの違いを説明できる
if-else文とif-else if文の違いについて、正しい説明を選べ。
採点する 諦めて解答を表示する(達成済みステータスを外します)
解答・解説を見る
正解 C. if-elseは2つの分岐、if-else ifは3つ以上の分岐ができる
解説 if-else文は「条件が成り立つ場合」と「成り立たない場合」の 2つに分岐 する。if-else if文は、複数の条件を順番に評価して 3つ以上の分岐 を実現できる。どちらも一度の判定で1つの処理ブロックだけが実行される。
問題4. switch文とif文の使い分けを説明できる
switch文の使用が最も適切な場面を選べ。
ヒントを表示switch文は 値の一致 を判定する。大小比較(>, <)や複雑な条件式はif文の方が適している。
採点する 諦めて解答を表示する(達成済みステータスを外します)
解答・解説を見る
正解 C. 1つの変数の値が複数の固定値のどれに一致するかで処理を分ける場合
解説 switch文は、1つの変数の値が特定の値に一致するかを判定するのに適している。case 1:, case 2: のように固定値との一致を判定する場面で使う。一方、大小比較(age >= 18)や複雑な条件(&&, ||)を使う場合はif文の方が適切である。
以下のコードの空欄を埋めて、点数が80点以上のときに「合格」と表示するプログラムを完成させよ。
int score = 85;
if (
) {
System.out.println("合格");
}
採点する 諦めて解答を表示する(達成済みステータスを外します)
解答・解説を見る
解説 if文の条件式には 比較演算子 を使う。「80点以上」は score >= 80 と書く。>= は「以上」を意味する比較演算子である。
問題6. if-else文で2つの処理を切り替えられる
以下のコードの空欄を埋めて、数値が正のときに「正の数」、それ以外のときに「正の数ではない」と表示するプログラムを完成させよ。
int number = -3;
if (number > 0) {
System.out.println("正の数");
}
{
System.out.println("正の数ではない");
}
採点する 諦めて解答を表示する(達成済みステータスを外します)
解答・解説を見る
解説 if-else文は、条件が成り立つ場合と成り立たない場合の2つの処理を切り替える。else ブロックはif文の条件が false のときに実行される。else の後に条件式は書かない。
問題7. if-else if-elseで3つ以上の処理を分けられる
以下のコードの空欄を埋めて、点数に応じてA〜Cの評価を表示するプログラムを完成させよ。
int score = 75;
if (score >= 80) {
System.out.println("A");
}
(score >= 60) {
System.out.println("B");
}
{
System.out.println("C");
}
採点する 諦めて解答を表示する(達成済みステータスを外します)
解答・解説を見る
解説 3つ以上の分岐をするには else if を使う。条件は上から順に評価され、最初に true になったブロックだけが実行される。どの条件にも当てはまらない場合は else ブロックが実行される。
以下の要件を満たすプログラムを完成させよ。
要件 :
変数 age が18以上 かつ 変数 hasTicket が true のとき、「入場できます」と表示する
それ以外のとき、「入場できません」と表示する
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にも一致しない場合に実行される。
問題10. switchのbreakの役割を説明できる
switch文でbreakを書かなかった場合、どのような動作になるか。最も適切なものを選べ。
ヒントを表示breakがない場合の動作を フォールスルー と呼ぶ。case 2に一致した場合、case 3以降の処理も順番に実行される。
採点する 諦めて解答を表示する(達成済みステータスを外します)
解答・解説を見る
正解 B. 一致したcaseから以降のcaseの処理もすべて実行される
解説 switch文でbreakを省略すると、一致したcaseの処理が実行された後、次のcaseの処理もそのまま実行される。これを フォールスルー(fall-through) と呼ぶ。意図しないフォールスルーはバグの原因となるため、各caseの末尾にbreakを書くのが基本である。
問題11. 条件分岐のコードを読んで結果を予測できる
以下のJavaコードを実行した場合、何が出力されるか。
int x = 15 ; if ( x > 20 ) { System . out . println ( "A" ) ; } else if ( x > 10 ) { System . out . println ( "B" ) ; } else { System . out . println ( "C" ) ; } 採点する 諦めて解答を表示する(達成済みステータスを外します)
解答・解説を見る
解説 変数 x の値は15である。
x > 20 → 15 > 20 は false → Aは出力されない
x > 10 → 15 > 10 は true → Bが出力される
else ifは上から順に評価され、最初にtrueになった条件のブロックだけが実行される。x > 10 がtrueなので、elseブロックは実行されない。
問題12. 年齢や点数で処理を変えるプログラムが書ける
以下の要件を満たすプログラムを完成させよ。
要件 :
変数 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" ) ; } 採点する 諦めて解答を表示する(達成済みステータスを外します)
解答・解説を見る
解説 このコードには 独立した3つのif文 がある。else ifではないため、各if文はそれぞれ独立して条件を評価する。
x > 10 → 15 > 10 は true → Aが出力される
x > 5 → 15 > 5 は true → Bが出力される
x > 20 → 15 > 20 は false → Cは出力されない
独立したif文は すべての条件が個別に評価 される点がポイントである。
問題14. if-else 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" ) ; } 採点する 諦めて解答を表示する(達成済みステータスを外します)
解答・解説を見る
解説 このコードは if-else if で連結されている。else ifの場合、上から順に条件を評価し、最初にtrueになった条件のブロックだけ が実行される。
x > 10 → 15 > 10 は true → Aが出力される
最初の条件がtrueだったので、以降のelse ifは 評価されない
独立したif文(前の問題)とは異なり、else ifでは1つの条件が成り立った時点で残りはスキップされる。
問題15. 独立ifとelse ifの動作の違いを見分けられる
以下の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 (独立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 は「numberを2で割った余り」であり、偶数であれば余りは0になる。したがって number % 2 == 0 が偶数判定の条件式となる。
問題17. if-else if-else文を穴埋めで書ける
以下のコードの空欄を埋めて、点数に応じた評価を表示するプログラムを完成させよ。
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未満」を明示的に書く必要はない。
問題18. switchのフォールスルーの結果を予測できる
以下の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の処理も実行される。
採点する 諦めて解答を表示する(達成済みステータスを外します)
解答・解説を見る
解説 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 実行されない -