在庫数を更新せよ
問題のポイント
検索して、見つかったら「書き換える」。
今回やるのは、検索+更新という実務で非常によく出る操作。
- どれか1つを探し出して
- その中の値を更新する
という流れができれば、もう立派なデータ操作。
今回はProduct
クラスにsetStock()
を追加して書き換えることになる。
まず、日本語で考えろ
- 商品のリスト(List)がある
- 商品名で検索する
- 該当商品が見つかれば、在庫数を新しい値で更新する
- 見つからなければ「該当商品なし」と出力する
コメントを書け
// 見つかったかどうかを記録するフラグを用意する
// リストをループで回す
// 商品名が一致すれば setStock で在庫数を更新し、メッセージを出して終了
// 最後まで見つからなければ「該当商品なし」と出力する
コメントに従ってコードを書け
public class ProductUtil {
public static void updateStockByName(ArrayList<Product> products, String keyword, int newStock) {
boolean found = false;
for (int i = 0; i < products.size(); i++) {
Product p = products.get(i);
if (p.getName().equals(keyword)) {
p.setStock(newStock);
System.out.println(p.getName() + "の在庫数を" + newStock + "に更新しました");
found = true;
break;
}
}
if (!found) {
System.out.println("該当商品なし");
}
}
}
コードの解説
p.getName().equals(keyword)
商品名とキーワードを比較。==
じゃなくてequals()
を使うのは鉄則。
比較対象が String のときは、常に内容を比べること。
p.setStock(newStock)
該当商品の在庫数を新しい値に書き換える。
セッターメソッドを通してしか値を変更できないようにしてある。
System.out.println(...)
更新後の確認メッセージを表示。何を変更したのかを明示することで、処理の結果が明確になる。
found
フラグのチェック
最後に!found
を見ることで、「何も見つからなかった」ケースを丁寧に拾っている。
フラグ管理は、検索系処理における必須スキル。
つまづきやすいポイント
setStock()
を定義していないとコンパイルエラーになる。
Product クラスにセッターメソッドをちゃんと追加しているか?
フィールドがprivate
である以上、外部からはメソッド経由でしか更新できない。break を忘れると、全件更新になる可能性あり。
一致する商品を見つけたら処理を終えるように、break
でループを止めるのが鉄則。「一致しなかったとき」の出力が後回しになりがち。
フラグがなければ、「なかったこと」に気づけない。
検索 → 判定 →処理 or 諦め の3ステップがちゃんと書けているか確認せよ。
teshのひとこと
読み取りだけなら見てるだけで済む。
でも、おまえがコードで何かを“変えたい”なら──
それは「設計」に手を突っ込むってことだ。見つけて、書き換える。
そのときコードに意思が宿る。
単なる自動処理じゃない、“判断と変更”が始まる。
Just keep typing, baby.
読むだけで満足すんな。書き換えてこそ、おまえのコードだ。
他のステップや学習順序を確認したい場合は、
[配列修羅道:全体のステップ構成] をチェックしてくれ。