配列修羅道:Step07

配列修羅道:Step07 未分類

商品名で検索せよ

問題を見る(javadrillへ)


問題のポイント

検索とは、“一致する何かを探し出す”という行為。
今回の検索対象は「商品名」。
商品の一覧(List)の中から、キーワードに一致するものを探す処理を組む。

初めて登場するのが equals() による文字列の一致チェック
== と equals の違いをちゃんと理解しないと、見えないバグを生むぞ。


まず、日本語で考えろ

  • Product のリストがある
  • その中から「商品名」が一致する商品を探す
  • 見つかれば在庫数を表示
  • 見つからなければ「該当商品なし」と表示する

コメントを書け

// 見つかったかどうかを記録する変数を用意する
// リストをループして、商品名が一致するか調べる
// 一致したら在庫数を表示して、見つかったフラグを立ててループ終了
// 最後まで見つからなければ「該当商品なし」と表示する

コメントに従ってコードを書け

public class ProductUtil {
    public static void searchByName(ArrayList<Product> products, String keyword) {
        boolean found = false;

        for (int i = 0; i < products.size(); i++) {
            Product p = products.get(i);

            if (p.getName().equals(keyword)) {
                System.out.println(p.getName() + "の在庫数: " + p.getStock());
                found = true;
                break;
            }
        }

        if (!found) {
            System.out.println("該当商品なし");
        }
    }
}

コードの解説

boolean found = false;
最初は「見つかっていない」前提。
ループ内で見つかったら true に切り替えるためのフラグ。

p.getName().equals(keyword)
商品名と検索キーワードの「中身の比較」をしている。
文字列の比較には == じゃなく equals() を使うのが鉄則。

found = true; break;
条件を満たす商品を見つけたら、フラグを立ててループ終了。
無駄に回し続けないことも、コードを設計する上で大事な判断。

if (!found)
最後まで見つからなかった場合だけ表示。
こういう “なかったときの処理” を入れ忘れがちなので注意。


つまづきやすいポイント

文字列比較で == を使ってしまう
Javaでは == は「同じ箱(オブジェクト)か」を調べる。
中身(文字列そのもの)を比べるには equals() を使わないと絶対にダメ。

"みかん" == "みかん" が false になることもある。

検索失敗時の処理が抜けがち
「見つかったら出力」は誰でも書けるが、
「見つからなかったときの出力」は忘れやすい。
boolean found を使って、その状況をちゃんと拾っておけ。

teshのひとこと

プログラムは、真か偽かを見分けるためにある。
それをやるのが「比較」だ。
でもな──その比較が間違ってたら、全てがズレる。

== でバグってるコードを、オレは死ぬほど見てきた。
似てるだけで中身が違うもの──そんな“偽の一致”にダマされんな。

Just keep typing, baby.
コードの真偽は、比べ方で決まる。


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

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