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

Java Java
スポンサーリンク

実務型メニューアプリ(Enum + Service + switch + ループ)

では、Enum+Service+switch+入力ループ を組み合わせた、実務型のユーザーメニューアプリを作ります。
ポイントは 安全性と拡張性を重視 した設計です。


1. Enumでメニューを管理

public enum MenuOption {
    SHOW(1, "商品一覧を見る"),
    SEARCH(2, "商品を検索する"),
    PURCHASE(3, "購入手続きへ進む"),
    EXIT(0, "終了する");

    private final int code;
    private final String description;

    MenuOption(int code, String description) {
        this.code = code;
        this.description = description;
    }

    public int getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    // コードからEnumを取得するメソッド
    public static MenuOption fromCode(int code) {
        for (MenuOption option : values()) {
            if (option.getCode() == code) {
                return option;
            }
        }
        return null; // 無効なコードの場合
    }
}
Java

💡 ポイント:

  • 数字と表示名をセットで管理
  • fromCode() で入力値を安全にEnumに変換
  • 無効値のチェックが簡単になる

2. Serviceクラス(処理を担当)

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

💡 ポイント:

  • 各メニューの処理は Service に集約
  • Main は「入力・ループ・switch制御」のみ

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();

        while (true) {
            // メニュー表示
            System.out.println("=== メニュー ===");
            for (MenuOption option : MenuOption.values()) {
                System.out.println(option.getCode() + ": " + option.getDescription());
            }
            System.out.print("番号を選んでください: ");

            int input = -1;
            try {
                input = scanner.nextInt();
                scanner.nextLine(); // 改行消去
            } catch (Exception e) {
                scanner.nextLine(); // 不正入力クリア
                System.out.println("→ 数字を入力してください\n");
                continue;
            }

            MenuOption choice = MenuOption.fromCode(input);

            if (choice == null) {
                System.out.println("→ 無効な番号です\n");
                continue;
            }

            switch (choice) {
                case SHOW:
                    service.showItems();
                    break;
                case SEARCH:
                    System.out.print("検索したい商品名を入力してください: ");
                    String keyword = scanner.nextLine();
                    service.searchItem(keyword);
                    break;
                case PURCHASE:
                    service.purchase();
                    break;
                case EXIT:
                    System.out.println("→ プログラムを終了します。");
                    scanner.close();
                    return; // プログラム終了
            }
        }
    }
}
Java

4. 特徴・実務ポイント

ポイント解説
Enum管理メニュー番号と表示名を一元管理、安全にswitch文へ渡せる
Serviceクラス分離処理内容の変更がMainに影響せず安全
入力例外処理try-catchで文字入力や不正値を防ぐ
拡張性新しいメニューを追加しても Enum と Service に追記するだけでOK
可読性Mainは入力と分岐のみ、処理はService、構造が明確

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

  1. DB連携
    • 商品一覧や検索をデータベースから取得するように変更
  2. ログ出力
    • 処理履歴を SLF4J などのロガーで記録
  3. メニュー多段階化
    • サブメニューを Enum + Service で作り、階層構造を管理
  4. ユニットテスト
    • Service メソッドを JUnit でテスト可能にして品質向上

まとめ

  • Enum + Service + switch の組み合わせで 安全で保守性の高いメニュー設計 が可能
  • 実務でも「Mainは最小限」「処理はService」「設定はEnum」と整理するのが基本
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました