演習問題3(レジ袋)


演習問題3-3 (Iterator)

演習問題3-2 では、ShopperList クラスは、Shopper クラス固有のメソッドである getCount() や getAt(int) を使用していました。そのため、Shopper クラスの変更に影響を受ける可能性があります。

そこで、配列などのデータ構造の各要素に対する繰返し処理を抽象化したイテレータを用いて、以下の ShopperList クラスが動作するように書き換えなさい。


実行結果
(八百○)大根,125円,1個
(八百○)レタス,294円,2個
(八百○)(△肉店)豚肉,245円,250g
(八百○)(△肉店)鶏肉,156円,200g
(八百○)トマト,276円,4個


コード

Enshu303.java
public class Enshu303 { public static void main(String[] args) { Shopper s1 = new Shopper("八百○", 5); // レジ袋5円 s1.add(new Vegetable("大根", 125, 1)); s1.add(new Vegetable("レタス", 147, 2)); Shopper s2 = new Shopper("△肉店", 3); // レジ袋3円 s2.add(new Meat("豚肉", 98, 250)); s2.add(new Meat("鶏肉", 78, 200)); s1.add(s2); s1.add(new Vegetable("トマト", 69, 4)); System.out.println(s1.getInfo(new ShopperList())); } }
ShopperList.java
public class ShopperList implements IVisitor { // 途中 略 public String makeInfo(Shopper shopper) { String saveShop = currentShop; StringBuilder s = new StringBuilder(); currentShop += "(" + shopper.getName() + ")"; ShopperIterator it = shopper.iterator(); while(it.hasNext()) { s.append(it.next().getInfo(this)); } currentShop = saveShop; return s.toString(); } }






演習問題3-3 (Iterator)