List を作って全商品を出力せよ
問題のポイント
オブジェクトのリスト(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
なので、外からは直接触れない。
つまづきやすいポイント
リストの中身が「オブジェクト」だという意識が持てているか?
これまではString
やint
のリストだった。
今回はProduct
クラスのインスタンスが入ってる。.get(i)
の時点で「中身ごと取り出している」ことを忘れずに。フィールドを直接触ろうとすると怒られる
p.name
は使えない(name
は private だから)。getName()
やgetStock()
を通すのがオブジェクト指向の基本作法。
—
teshのひとこと
配列やリストは、値を“並べる”ための道具だった。
でもな、クラスをリストに突っ込んだ瞬間に、それは構造の集合体になる。おまえが
.get(i)
した瞬間、そこには「商品名」も「在庫」もある。
ループは、ただの繰り返しじゃなくて、「情報を走査する」行為になる。
Just keep typing, baby.
構造を並べ、構造を回せ。コードに秩序を刻め。
他のステップや学習順序を確認したい場合は、
[配列修羅道:全体のステップ構成] をチェックしてくれ。