では今回は、ユーザー入力で動くミニアプリを作りながら、switch文の実践力を鍛えましょう。
初心者でも実務に近い「メニュー制御の考え方」が身につきます。
学べること
- ユーザーの入力を
Scannerで受け取る方法 - 入力値に応じて処理を
switchで分岐 whileループでメニューを繰り返す(終了条件つき)
完成イメージ
=== メニュー ===
1: 商品一覧を見る
2: 商品を検索する
3: 購入手続きへ進む
0: 終了する
番号を選んでください: 2
→ 商品を検索します
=== メニュー ===
1: 商品一覧を見る
2: 商品を検索する
3: 購入手続きへ進む
0: 終了する
番号を選んでください: 0
→ プログラムを終了します
プログラムの流れ(図でイメージ)
┌─────────────────────────────┐
│ while (true) { │
│ メニューを表示 │
│ ユーザーから番号を入力 │
│ switch (入力値) { │
│ case 1: 商品一覧を表示 → break; │
│ case 2: 検索 → break; │
│ case 3: 購入 → break; │
│ case 0: 終了 → break + ループ終了 │
│ default: エラーメッセージ │
│ } │
│ } │
└─────────────────────────────┘
コード全体(完成版)
import java.util.Scanner;
public class MenuApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 入力を受け取る準備
while (true) {
// メニュー表示
System.out.println("=== メニュー ===");
System.out.println("1: 商品一覧を見る");
System.out.println("2: 商品を検索する");
System.out.println("3: 購入手続きへ進む");
System.out.println("0: 終了する");
System.out.print("番号を選んでください: ");
int choice = scanner.nextInt(); // 入力値を取得
// 入力値に応じた処理
switch (choice) {
case 1:
System.out.println("→ 商品一覧を表示します。\n");
break;
case 2:
System.out.println("→ 商品を検索します。\n");
break;
case 3:
System.out.println("→ 購入手続きに進みます。\n");
break;
case 0:
System.out.println("→ プログラムを終了します。");
scanner.close();
return; // mainメソッドを終了
default:
System.out.println("→ 無効な番号です。0〜3を入力してください。\n");
}
}
}
}
Javaコード解説(初心者向けにやさしく)
| 行 | 説明 |
|---|---|
Scanner scanner = new Scanner(System.in); | コンソールからキーボード入力を受け取る準備。 |
while (true) | 無限ループ。メニューを繰り返し表示するために使用。 |
System.out.print() | printlnと違い、改行せずに表示。入力を同じ行で受けたいときに便利。 |
int choice = scanner.nextInt(); | 入力された整数を読み取る。例:ユーザーが「2」と入力したら choice は 2。 |
switch (choice) | 入力値によって分岐。1〜3 はそれぞれの処理、0 は終了、その他はエラー。 |
return; | main メソッドを終了。break ではなく return で完全にプログラムを抜ける。 |
scanner.close(); | Scanner を閉じる。リソースをきちんと解放する実務的な習慣。 |
応用課題(レベルアップ練習)
課題1:検索ワードを入力できるようにしてみよう
2番を選んだときに「検索したい商品名」を入力できるように変更してみましょう。
ヒント:
nextInt() のあとに nextLine() を使うときは、改行文字を消すために一行読み飛ばしが必要です。
✅サンプル改良コード
import java.util.Scanner;
public class MenuApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("=== メニュー ===");
System.out.println("1: 商品一覧を見る");
System.out.println("2: 商品を検索する");
System.out.println("3: 購入手続きへ進む");
System.out.println("0: 終了する");
System.out.print("番号を選んでください: ");
int choice = scanner.nextInt();
scanner.nextLine(); // 改行を読み飛ばす
switch (choice) {
case 1:
System.out.println("→ 商品一覧を表示します。\n");
break;
case 2:
System.out.print("検索したい商品名を入力してください: ");
String keyword = scanner.nextLine();
System.out.println("→ 「" + keyword + "」を検索しました。\n");
break;
case 3:
System.out.println("→ 購入手続きに進みます。\n");
break;
case 0:
System.out.println("→ プログラムを終了します。");
scanner.close();
return;
default:
System.out.println("→ 無効な番号です。\n");
}
}
}
}
Java実務での発展ポイント
| テーマ | 解説 |
|---|---|
| 🔸 ログ出力 | 実務では System.out.println の代わりに Logger(SLF4Jなど)を使う。 |
| 🔸 入力値チェック | 不正入力(数字以外)を try-catch で安全に処理する。 |
| 🔸 メニュー構造化 | 各処理をメソッドに分けると読みやすくなる。 |
| 🔸 Enum メニュー | 定数を enum で管理して、switch で分岐する設計も便利。 |
