Java | ミニアプリ:メニュー選択プログラム(switch文)

Java Java
スポンサーリンク

実務風メニューアプリ(Main + Service構造)

では、先ほどのユーザー入力付きメニューを 実務風にクラス構造で整理 してみましょう。
ポイントは MainクラスServiceクラス を分けて責務を明確にすることです。


1. 設計の考え方

クラス役割
Mainアプリ起動・ユーザー入力ループ・終了制御
MenuServiceメニューの処理内容(一覧表示・検索・購入など)を担当

こうすると、処理の追加や変更があっても Mainを触らずServiceだけ更新 できるので実務で便利です。


2. MenuServiceクラス

public class MenuService {

    // 商品一覧表示
    public void showItems() {
        System.out.println("→ 商品一覧を表示します。\n");
    }

    // 商品検索
    public void searchItem(String keyword) {
        System.out.println("→ 「" + keyword + "」を検索しました。\n");
    }

    // 購入処理
    public void purchase() {
        System.out.println("→ 購入手続きに進みます。\n");
    }
}
Java

📝 ポイント:

  • 1つの処理ごとにメソッド化して責務を分ける
  • メニュー処理の追加・修正が容易

3. Mainクラス(入力とswitch制御)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        MenuService service = new MenuService(); // Serviceクラスのインスタンス化

        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:
                    service.showItems();
                    break;
                case 2:
                    System.out.print("検索したい商品名を入力してください: ");
                    String keyword = scanner.nextLine();
                    service.searchItem(keyword);
                    break;
                case 3:
                    service.purchase();
                    break;
                case 0:
                    System.out.println("→ プログラムを終了します。");
                    scanner.close();
                    return;
                default:
                    System.out.println("→ 無効な番号です。\n");
            }
        }
    }
}
Java

4. 仕組みの整理(図イメージ)

Main
 ├─ whileループ(入力待ち)
 ├─ switch(choice)
 │    ├─ case 1 → service.showItems()
 │    ├─ case 2 → service.searchItem(keyword)
 │    ├─ case 3 → service.purchase()
 │    └─ case 0 → 終了
MenuService
 ├─ showItems()
 ├─ searchItem(String keyword)
 └─ purchase()

💡 ポイント:

  • Mainは「入力受付とループ制御」だけ
  • MenuServiceは「処理内容の実装」に専念
  • これで 責務が分離され、保守性・可読性が向上

5. 発展アイデア(さらに実務寄りに)

  • Enumでメニュー管理
enum MenuOption { SHOW, SEARCH, PURCHASE, EXIT }
Java

→ switch文をEnumで制御すると安全性UP

  • 例外処理で入力エラー対応
try {
    int choice = scanner.nextInt();
} catch(InputMismatchException e) {
    scanner.nextLine(); // 不正入力をクリア
    System.out.println("数字を入力してください");
}
Java
  • メニューの処理を別パッケージに分ける
    • service パッケージ → MenuService.java
    • app パッケージ → Main.java
      → 大規模プロジェクト向け設計

💡 この構造を使うと、将来「購入処理を複雑化したい」「検索機能をデータベース対応にしたい」などの改修も Mainを触らずServiceだけ変更 で済むようになります。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました