配列修羅道:Step09

配列修羅道:Step09 learn

在庫数を更新せよ

問題を見る(javadrillへ)


問題のポイント

検索して、見つかったら「書き換える」。
今回やるのは、検索+更新という実務で非常によく出る操作。

  • どれか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.
読むだけで満足すんな。書き換えてこそ、おまえのコードだ。


👉 配列修羅道:全体のステップ構成はこちら

他のステップや学習順序を確認したい場合は、
[配列修羅道:全体のステップ構成] をチェックしてくれ。