102 「Map修羅道」 StepFinal 解答例

MapUtil.java

import java.util.*;

public class MapUtil {
    public static void runOrderSimulator() {
        // 商品ごとの単価を保持するMap
        Map<String, Integer> priceMap = new HashMap<>();
        priceMap.put("Apple", 120);
        priceMap.put("Banana", 80);
        priceMap.put("Orange", 100);

        // 注文数を保持するMap
        Map<String, Integer> orderMap = new HashMap<>();
        orderMap.put("Apple", 3);
        orderMap.put("Banana", 5);
        orderMap.put("Grape", 2); // 登録されていない商品

        int total = 0; // 総売上金額

        // 注文Mapをループ
        for (String product : orderMap.keySet()) {
            int quantity = orderMap.get(product);

            // 商品が登録されているかチェック
            if (priceMap.containsKey(product)) {
                int price = priceMap.get(product);
                int subtotal = price * quantity;

                // 明細を出力
                System.out.println(product + " → 単価: " + price + "円, 個数: " + quantity + ", 小計: " + subtotal + "円");

                // 総計に加算
                total += subtotal;
            } else {
                // 商品が見つからない場合はエラー表示
                System.out.println("エラー: 商品 '" + product + "' は未登録です。");
            }
        }

        // 総売上を出力
        System.out.println("総売上: " + total + "円");
    }
}

解説:Mapを使って注文処理を実装する

このステップでは、これまで学んだMap操作を総動員して、実践的な処理を構築します。

ポイントとなる処理

  1. 価格と注文数という「別のMap」を対応させる
    orderMap をループして、各商品名に対して priceMap で単価を参照します。
  2. containsKey() を使って、存在しない商品をチェック
    未登録商品(例:”Grape”)は、エラーとして出力し、集計対象に含めません。
  3. 各商品の小計(単価 × 数量)を計算し、逐次表示
    最後に総売上を合計・出力します。

実行結果の例

Apple → 単価: 120円, 個数: 3, 小計: 360円
Banana → 単価: 80円, 個数: 5, 小計: 400円
エラー: 商品 'Grape' は未登録です。
総売上: 760円

まとめ

  • Mapの組み合わせ(priceMap × orderMap)を自在に使えること
  • containsKey() による存在チェックの重要性
  • 条件分岐とループ処理の組み合わせが自然に書けるか

このFinalステップを自力で書き切れたなら、Mapの基本操作は一通りマスターしたと言って良い。
これでMapにビビることは、もうない。。

102 ステップアップ問題 「Map修羅道」