質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

1回答

1812閲覧

ArrayListに商品情報を登録して表示させたい

trainingnow

総合スコア22

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

0クリップ

投稿2022/01/27 06:58

ShopMainクラスで実行されるshop.addItemの内容をShopクラスのArrayListに登録して表示させるメソッドを実装したい。
4つの商品情報を並べて表示したい。
↓の状況だとshop.addItemで最後のメソッドのみ拾われてしまう。

Java

1public class ShopMain { 2 public static void main(String[] args) { 3 Shop shop = new Shop(); 4 5 shop.addItem(new Video("V0001","ローマの休日 ",2980,6,"ウィリアム・ワイラー")); 6 shop.addItem(new Video("V0002","風と共に去りぬ",2980,5,"ヴィクター・フレミング")); 7 shop.addItem(new CD( "C0001","ビートルズ全集",3000,1,"ビートルズ")); 8 shop.addItem(new CD( "C0002","スリラー   ",2500,9,"マイケル・ジャクソン")); 9 10 System.out.println("CODE\tタイトル\t価格\t在庫\t監督/アーティスト"); 11 System.out.println("--------------------------------------------------------------"); 12 shop.showItem(); 13 System.out.println("--------------------------------------------------------------"); 14 System.out.println(); 15 shop.sellItem("V0001"); 16 shop.sellItem("C0002"); 17 System.out.println(); 18 System.out.println("CODE\tタイトル\t価格\t在庫\t監督/アーティスト"); 19 System.out.println("--------------------------------------------------------------"); 20 shop.showItem(); 21 System.out.println("--------------------------------------------------------------"); 22 } 23}

Java

1public class Shop { 2 3 private ArrayList<String> items; //商品情報を格納するリスト 4 Item cd = new CD(null, null, 0, 0, null); 5 Item video = new Video(null, null, 0, 0, null); 6 7 /** 8 * @param items 9 * コンストラクタ 10 */ 11 public Shop() { 12 ArrayList<String> items = new ArrayList<>(); 13 this.items = items; 14 } 15 16 //商品情報をitemsに登録する 17 public void addItem(Item item) { 18 items.add(item.getItemID()); 19 items.add(item.getItemName()); 20 items.add(String.valueOf(item.getPrice())); 21 items.add(String.valueOf(item.getStock())); 22 items.add(cd.getArtist()); 23 items.add(video.getMovieDirector()); 24 25 System.out.println("アイテムサイズ "+items.size()); 26 } 27 28 //itemsに登録されている商品情報を全て画面に表示する 29 public void showItem() { 30 cd.printItemDetail(); 31 video.printItemDetail(); 32 System.out.println(items); 33 } 34 35 //itemsに登録されている商品情報から該当する商品を検索しメッセージを表示する 36 public void sellItem(String itemID) { 37// System.out.println(items.get(1) + "を" + items.get(2) + "で販売しました"); 38// Item.decrementStock(); 39 } 40 41 42} 43 44class Item { 45 private static String itemID; //商品ID 46 47 private static String itemName; //商品名 48 49 private static int price; //値段 50 51 private static int stock; //在庫数 52 53 //デフォルトコンストラクタ 54 public Item() {} 55 56 public String getMovieDirector() { 57 return null; 58 } 59 60 public String getArtist() { 61 return null; 62 } 63 64 //コンストラクタ 65 public Item(String itemID, String itemName, int price, int stock) { 66 Item.itemID = itemID; 67 Item.itemName = itemName; 68 Item.price = price; 69 Item.stock = stock; 70 } 71 72 //商品ID、商品名、値段、在庫数を表示するメソッド 73 public void printItemDetail() { 74 System.out.println(itemID + "\t"+ itemName + "\t" + price + "円\t" + stock + "個"); 75 } 76 77 /** 78 * @return itemID 79 * 商品ID を返却するメソッド 80 */ 81 public String getItemID() { 82 return itemID; 83 } 84 85 /** 86 * @return itemName 87 * 商品名を返却するメソッド 88 */ 89 public String getItemName() { 90 return itemName; 91 } 92 /** 93 * @return price 94 * 値段を返却するメソッド 95 */ 96 public int getPrice() { 97 return price; 98 } 99 100 public int getStock() { 101 return stock; 102 } 103 104 //在庫数から1個販売するメソッド 105 public static void decrementStock() { 106 stock -= 1; 107 } 108 109 110} 111 112class CD extends Item { 113 private static String artist; //アーティスト名 114 115 /** 116 * @param itemID 117 * @param itemName 118 * @param price 119 * @param stock 120 * コンストラクタ 121 */ 122 public CD(String itemID, String itemName, int price, int stock, String artist) { 123 super(itemID, itemName, price, stock); 124 CD.artist = artist; 125 } 126 127 public String getArtist() { 128 return artist; 129 } 130 131 //商品ID、商品名、値段、在庫数、アーティスト名を表示するメソッド 132 @Override 133 public void printItemDetail() { 134 System.out.println(super.getItemID() + "\t" + super.getItemName() + "\t" + super.getPrice() + "円\t" + super.getStock() + "個\t" + getArtist()); 135 } 136 137} 138 139class Video extends Item { 140 private static String movieDirector; //監督名 141 142 /** 143 * @param movieDirector 144 * コンストラクタ 145 */ 146 public Video(String itemID, String itemName, int price, int stock, String movieDirector) { 147 super(itemID, itemName, price, stock); 148 Video.movieDirector = movieDirector; 149 } 150 151 public String getMovieDirector() { 152 return movieDirector; 153 } 154 155 //。商品ID、商品名、値段、在庫数、監督名を表示するメソッド 156 @Override 157 public void printItemDetail() { 158 System.out.println(super.getItemID() + "\t" + super.getItemName() + "\t" + super.getPrice() + "円\t" + super.getStock() + "個\t" + getMovieDirector()); 159 } 160

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

private ArrayList<String> items; //商品情報を格納するリスト

"商品情報" は Item クラスのことだと思います。
ArrayList<Item> とし、 addItem メソッドはパラメータの item をそのまま items に add する必要があります。
showItem も「itemsに登録されている商品情報を全て画面に表示する」なら items の内容をループ等で表示する必要があると思います。
Item 類のフィールドが static では意味がありません。


java

1import java.util.*; 2 3public class Main { 4 public static void main(String[] args) { 5 Shop shop = new Shop(); 6 7 shop.addItem(new Video("V0001","ローマの休日",2980,6,"ウィリアム・ワイラー")); 8 shop.addItem(new Video("V0002","風と共に去りぬ",2980,5,"ヴィクター・フレミング")); 9 shop.addItem(new CD("C0001","ビートルズ全集",3000,1,"ビートルズ")); 10 shop.addItem(new CD("C0002","スリラー",2500,9,"マイケル・ジャクソン")); 11 12 showAssortment(shop); 13 14 System.out.println(); 15 shop.sellItem("V0001"); 16 shop.sellItem("C0002"); 17 System.out.println(); 18 19 showAssortment(shop); 20 } 21 22 private static void showAssortment(Shop shop) { 23 System.out.println("CODE\tタイトル\t\t価格\t在庫\t監督/アーティスト"); 24 System.out.println("--------------------------------------------------------------"); 25 shop.showItems("%s %-8s %4d円 %4d個 %s"); 26 System.out.println("--------------------------------------------------------------"); 27 } 28} 29 30class Shop { 31 private List<Item> items = new ArrayList<>(); //商品情報を格納するリスト 32 33 //商品情報をitemsに登録する 34 public void addItem(Item item) { 35 items.add(item); 36 //System.out.println("アイテムサイズ "+items.size()); 37 } 38 39 //itemsに登録されている商品情報を全て画面に表示する 40 public void showItems(String format) { 41 for(Item item : items) System.out.println(item.formatting(format)); 42 } 43 44 //itemsに登録されている商品情報から該当する商品を検索しメッセージを表示する 45 public void sellItem(String itemID) { 46 Item item = getItem(itemID); 47 if(item == null) return; //無効な id なら無視 48 System.out.println(item.name+ "を" + item.getPrice() + "円で販売しました"); 49 item.decrementStock(); 50 } 51 52 private Item getItem(String id) { 53 for(Item item : items) if(item.id.equals(id)) return item; 54 return null; //無かった 55 } 56} 57 58abstract class Item { 59 final String id; //商品ID 60 final String name; //商品名 61 protected int price; //値段 62 protected int stock; //在庫数 63 64 //コンストラクタ 65 public Item(String id, String name, int price, int stock) { 66 this.id = id; 67 this.name = name; 68 this.price = price; 69 this.stock = stock; 70 } 71 72 public int getPrice() { return price; } 73 public int getStock() { return stock; } 74 75 public void decrementStock() { --stock; } 76 77 abstract String formatting(String format); 78 protected String preformatString(String str, int len) { 79 while(str.length() < len) str += " "; 80 return str; 81 } 82} 83 84class CD extends Item { 85 private String artist; //アーティスト名 86 87 public CD(String id, String name, int price, int stock, String artist) { 88 super(id, name, price, stock); 89 this.artist = artist; 90 } 91 92 @Override 93 public String formatting(String format) { 94 return String.format(format, id, preformatString(name,7), price, stock, artist); 95 } 96} 97 98class Video extends Item { 99 private String movieDirector; //監督名 100 101 public Video(String id, String name, int price, int stock, String movieDirector) { 102 super(id, name, price, stock); 103 this.movieDirector = movieDirector; 104 } 105 106 @Override 107 public String formatting(String format) { 108 return String.format(format, id, preformatString(name,7), price, stock, movieDirector); 109 } 110}

plain

1CODE タイトル 価格 在庫 監督/アーティスト 2-------------------------------------------------------------- 3V0001 ローマの休日  2980円 6個 ウィリアム・ワイラー 4V0002 風と共に去りぬ 2980円 5個 ヴィクター・フレミング 5C0001 ビートルズ全集 3000円 1個 ビートルズ 6C0002 スリラー    2500円 9個 マイケル・ジャクソン 7-------------------------------------------------------------- 8 9ローマの休日を2980円で販売しました 10スリラーを2500円で販売しました 11 12CODE タイトル 価格 在庫 監督/アーティスト 13-------------------------------------------------------------- 14V0001 ローマの休日  2980円 5個 ウィリアム・ワイラー 15V0002 風と共に去りぬ 2980円 5個 ヴィクター・フレミング 16C0001 ビートルズ全集 3000円 1個 ビートルズ 17C0002 スリラー    2500円 8個 マイケル・ジャクソン 18--------------------------------------------------------------

投稿2022/01/27 07:16

編集2022/01/27 08:28
jimbe

総合スコア12646

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

trainingnow

2022/01/31 08:42

ご丁寧にありがとうございます。 私が質問の際に記述し忘れたことがあります。 ShopMainクラスは修正せずに実装しなければなりません。 ↑のクラスを修正せずに実装することは可能でしょうか。
jimbe

2022/01/31 11:33

もちろん、 ShopMain をご提示のままにすることは可能です。 回答の ShopMain は、表示の共通部分を showAssortment メソッドに纏めたのと、表示の調整、 Shop.showItem() のメソッド名の変更およびパラメータの追加だけです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問