📌 まずは問題を見ろ
→ javadrill.tech で出題された問題を見る(StepFinal)
問題のポイント
- 2つのMapを組み合わせて処理を行う実践形式
containsKey()
を使って、存在チェックと例外処理- 「合計金額の算出」+「エラー処理」+「総売上表示」まで一連の流れ
まず、日本語で考えろ
- 商品の単価一覧(priceMap)と、注文数(orderMap)がある。
- 商品ごとに「単価 × 注文数」で小計を出して、最後に総売上を出したい。
- でも、中には未登録の商品(Grape)も混じってる。これは除外。
コメントを書け
// priceMapとorderMapを用意する
// orderMapをループして、priceMapに商品が存在するか確認
// 存在すれば、単価×注文数の小計を計算して出力し、総売上に加算
// 存在しなければ、エラーとして出力する
// 最後に総売上金額を出力する
コメントに従ってコードを書け
import java.util.*;
public class MapUtil {
public static void runOrderSimulator() {
// 商品の単価データ
Map<String, Integer> priceMap = new HashMap<>();
priceMap.put("Apple", 120);
priceMap.put("Banana", 80);
priceMap.put("Orange", 100);
// 注文データ
Map<String, Integer> orderMap = new HashMap<>();
orderMap.put("Apple", 3);
orderMap.put("Banana", 5);
orderMap.put("Grape", 2); // 未登録の商品
int total = 0;
// 注文処理ループ
for (String item : orderMap.keySet()) {
if (priceMap.containsKey(item)) {
int price = priceMap.get(item);
int count = orderMap.get(item);
int subtotal = price * count;
System.out.println(item + ": 単価 " + price + "円 × " + count + "個 = " + subtotal + "円");
total += subtotal;
} else {
System.out.println("エラー: 登録されていない商品です → " + item);
}
}
System.out.println("総売上: " + total + "円");
}
}
実行結果の例(順不同)
Apple: 単価 120円 × 3個 = 360円
Banana: 単価 80円 × 5個 = 400円
エラー: 登録されていない商品です → Grape
総売上: 760円
コードの解説
priceMap
に商品と単価を、orderMap
に商品と注文数を登録。orderMap
をループし、priceMap.containsKey()
で存在チェック。- 登録済み商品なら単価×注文数の小計を計算して出力し、
total
に加算。 - 未登録の商品はエラーとして表示し、集計対象から除外。
- 最後に
total
を出力して、総売上を表示。
つまづきやすいポイント
get()
の前にcontainsKey()
を忘れると、未登録商品の処理で null を掛け算してバグる。- 2つのMapをまたぐ処理では、「どっちを主軸にループするか」が重要。今回は
orderMap
が主軸。 - 出力処理も含めて「流れを読む」練習になる。どこで何をしてるか説明できるようにしておけ。
teshのひとこと
このStepは、おまえが「Mapを使えるようになったか」を問うてくる。
複数のMapをつないで、条件分岐して、計算して、出力する。これ全部、現場で“よくある”。
写経じゃ到達できへん領域に、ようやく来たな。
Just keep typing, baby.
データを読み、意味をつなげ。おまえのMapに、世界を映せ。