配列修羅道:Step06

配列修羅道:Step06 learn

List を作って全商品を出力せよ

問題を見る(javadrillへ)


問題のポイント

オブジェクトのリスト(List)を操作する。
ここまでで作った Product クラスを、今度は 複数扱う ことになる。
つまり、「クラス × リスト」=構造の集合体ってわけだ。

ArrayList<Product> を使うとき、1つ1つの要素が「商品データ」そのものであることを意識できるかどうか。
この段階で、「構造をループする感覚」が養われる。


まず、日本語で考えろ

  • 商品(Product)を3つ作る(りんご、みかん、バナナ)
  • それらを ArrayList<Product> に追加する
  • そのリストをループで回して、各商品情報を出力する

コメントを書け

// 空のリストを作成する
// Product を3つ作ってリストに追加する
// リストをループで回して、名前と在庫数を出力する

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

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // 空のリストを作成する
        ArrayList<Product> products = new ArrayList<>();

        // Product を3つ作ってリストに追加する
        products.add(new Product("りんご", 10));
        products.add(new Product("みかん", 5));
        products.add(new Product("バナナ", 3));

        // リストをループで回して、名前と在庫数を出力する
        for (int i = 0; i < products.size(); i++) {
            Product p = products.get(i);
            System.out.println(p.getName() + " (在庫: " + p.getStock() + ")");
        }
    }
}

コードの解説

ArrayList<Product> products = new ArrayList<>();
商品情報(Product)のリストを作成。
<> の中でリストの中身の「型」を明示する(今回は Product)。

products.add(new Product("りんご", 10));
new でインスタンスを作成し、そのままリストに追加。
「オブジェクトを生成して即格納する」というパターン。

Product p = products.get(i);
リストから i 番目の要素(=Productインスタンス)を取り出す。
この時点で p は Product 型になっている。

p.getName() / p.getStock()
ゲッターを使って、インスタンス内部の情報を取り出す。
フィールドが private なので、外からは直接触れない。


つまづきやすいポイント

リストの中身が「オブジェクト」だという意識が持てているか?
これまでは Stringint のリストだった。
今回は Product クラスのインスタンスが入ってる。
.get(i) の時点で「中身ごと取り出している」ことを忘れずに。

フィールドを直接触ろうとすると怒られる
p.name は使えない(name は private だから)。
getName()getStock() を通すのがオブジェクト指向の基本作法。

teshのひとこと

配列やリストは、値を“並べる”ための道具だった。
でもな、クラスをリストに突っ込んだ瞬間に、それは構造の集合体になる。

おまえが .get(i) した瞬間、そこには「商品名」も「在庫」もある。
ループは、ただの繰り返しじゃなくて、「情報を走査する」行為になる。

Just keep typing, baby.
構造を並べ、構造を回せ。コードに秩序を刻め。


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

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