🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Q&A

解決済

3回答

623閲覧

listとmapを使ってanimalショップ

tanaka002

総合スコア22

Java

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

0グッド

0クリップ

投稿2019/09/19 06:51

編集2019/09/20 02:29

importとかは端折ってます。

java

1public class Main { 2 3 /** 4 * メインメソッド 5 * @param args 6 */ 7 public static void main(String[] args) { 8 9 //動物リスト作成 10 ArrayList<Animal> raionList = new ArrayList<Animal>(); 11 ArrayList<Animal> zouList = new ArrayList<Animal>(); 12 ArrayList<Animal> camelList = new ArrayList<Animal>(); 13 14 //動物を作成 15 Animal raion = new Animal(); 16 raion.setName("ライオン"); 17 18 //System.out.println(raion.getName()); 19 20 Animal zou = new Animal(); 21 zou.setName("ゾウ"); 22 23 //System.out.println(zou.getName()); 24 25 Animal camel = new Animal(); 26 camel.setName("らくだ"); 27 28 //System.out.println(camel.getName()); 29 30 31 //上記で作成した動物をそれぞれ動物リストに格納する 32 //ライオン3匹 33 raionList.add(raion); 34 raionList.add(raion); 35 raionList.add(raion); 36 //ゾウ2匹 37 zouList.add(zou); 38 zouList.add(zou); 39 //らくだ1匹 40 camelList.add(camel); 41 42 43 //それぞれの動物リストをそれぞれの檻に格納 44 45 Gage raionGage = new Gage(); 46 raionGage.setAnimalList(raionList); 47 48 //三匹入っている。 49 //System.out.println(raionGage.getAnimalList()); 50 51 Gage zouGage = new Gage(); 52 zouGage.setAnimalList(zouList); 53 54 //2匹入っている。 55 //System.out.println(zouGage.getAnimalList()); 56 57 Gage camelGage = new Gage(); 58 camelGage.setAnimalList(camelList); 59 60 //1匹入っている。 61 //System.out.println(camelGage.getAnimalList()); 62 63 //檻を動物ショップに設定 64 AnimalShop shop = new AnimalShop(); 65 66 //ライオンを設定 67 shop.setGageList(raionGage); 68 69 //ゾウを設定 70 shop.setGageList(zouGage); 71 72 //らくだを設定 73 shop.setGageList(camelGage); 74 75 //ショップ内の動物をすべて表示 76 shop.showAnimalAll(); 77 78 }

java

1/** 2 * 檻クラス 3 * @author 4 */ 5public class Gage { 6 7 /** 動物リスト */ 8 private ArrayList<Animal> animalList; 9 10 /** 11 * コンストラクタ<br> 12 * 動物リストを初期化 13 */ 14 public Gage(){ 15 16 //ここは初期化は必要なのか? 17 this.animalList = new ArrayList<Animal>(); 18 } 19 20 /** 21 * animalListを設定するメソッド 22 * @param animalList 動物リストを設定する 23 */ 24 public void setAnimalList(ArrayList<Animal> animalList) { 25 26 this.animalList = new ArrayList<Animal>(); 27 this.animalList = animalList; 28 //System.out.println(this.animalList); 29 30 } 31 32 /** 33 * animalListを取得するメソッド 34 * @return animalList 動物リスト 35 */ 36 public ArrayList<Animal> getAnimalList() { 37 return animalList; 38 } 39}

動物

java

1 2/** 3 * 動物クラス 4 * @author 5 */ 6public class Animal { 7 /** 動物の名前 */ 8 private String name; 9 10 /** 11 * 動物の名前を設定 12 * @param name 名前 13 */ 14 public void setName(String name){ 15 this.name = name; 16 } 17 18 /** 19 * 動物の名前を取得 20 * @return String 動物の名前 21 */ 22 public String getName(){ 23 return this.name; 24 } 25} 26

animalショップ

java

1 2/** 3 * @author 4 */ 5public class AnimalShop { 6 7 /** 檻リスト */ 8 private HashMap<String, Gage> gageList; 9 10 /** 11 * コンストラクタ<br> 12 * 檻リストを初期化 13 * @param shopName 14 */ 15 public AnimalShop(){ 16 this.gageList = new HashMap<String, Gage>(); 17 } 18 19 /** 20 * 引数の檻をフィールドの檻リストに設定<br> 21 * 檻内の動物名をキーに檻リストに設定する 22 * @param gage23 */ 24 public void setGageList(Gage gage){ 25 26 //フィールドの檻リストを初期化 27 //this.gageList = new HashMap<String, Gage>(); 28 //↑初期化ではなくてobjectを代入している。 29 30 //檻内の動物名を取得 31 ArrayList<Animal> animalList = gage.getAnimalList(); 32 33 //各動物リストの名前は同じであるため要素0番目を取得 34 Animal animal = (Animal)animalList.get(0); 35 36 //動物名を取得 37 String name = animal.getName(); 38 39 //動物名をキーに檻を設定 40 gageList.put(name , gage); 41 42 } 43 44 /** 45 * 檻リスト内の動物を全て表示するメソッド 46 */ 47 public void showAnimalAll(){ 48 49 for(Gage gage: gageList.values()){ 50 //動物リストを取得 51 ArrayList<Animal> animalList = gage.getAnimalList(); 52 53 //動物名 引数を表示 54 for(Animal animal: animalList){ 55 System.out.println("動物名:" + animal.getName()); 56 System.out.println("匹数:" + animalList.size()); 57 } 58 } 59 } 60}

javaを学習中です。
今、コレクションフレームワークについて勉強をしています。

理想の表示
動物名:ゾウ
匹数:2匹
動物名:ライオン
匹数:3匹
動物名:らくだ
匹数:1匹

ここまで作れたのですが、
動物名:らくだ
匹数:1匹
しか表示しないです。

自分でどこがダメなのかがわからなくなってしまいました。

どのようにしたらよいのでしょうか?

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

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

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

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

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

m.ts10806

2019/09/19 07:30

タイトルが起きている問題に対して大きすぎるので、もっと質問内容に寄せたタイトルに調整いただけたらと。
swordone

2019/09/19 14:14

Mainが2つあるけど??
tanaka002

2019/09/20 02:31

申し訳ありません。 修正しました。
guest

回答3

0

setGageListでgageListに毎度新たなオブジェクトを代入しているからでしょう。
まあ、setと言う名には反しないのかもしれませんが。

あと、肝心のAnimalShop#showAnimalAllはどこでしょうか。

質問編集を受けて

Java

//動物名 引数を表示
for(Animal animal: animalList){
System.out.println("動物名:" + animal.getName());
System.out.println("匹数:" + animalList.size());
}

動物名は全て同一なのですから、for文を使う意味が無いです。

投稿2019/09/19 07:36

編集2019/09/20 05:49
LouiS0616

総合スコア35668

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

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

tanaka002

2019/09/19 08:15

すみません。抜けてましたので追加しました。
LouiS0616

2019/09/19 08:54 編集

逆にAnimalShopクラス全体が抜け落ちてませんか?再編集して下さい。 また、回答前半の問題が解決しない限りはshowAnimalAllをどう実装しても完成は難しいです。
LouiS0616

2019/09/20 05:50

質問を編集して実行結果あるいはエラーに変化があったのなら、そのことも追記して下さい。 手元で検証するのは正直億劫です。
guest

0

解決済みなのに簡略化したいとはこれ如何に…って感じなのですが
前提:Shopクラスに
Map<String,Gage> gageList
が定義、要素の追加済み

java

1 public void showAnimal() { 2 for(Map.Entry<String, Gage> entry : gageList.entrySet()) { 3 System.out.println("動物名:" + entry.getKey()); 4 System.out.println("匹数:" + entry.getValue().getList().size()); 5 System.out.println(); //ただの改行 6 } 7 }

投稿2019/09/24 01:53

tetutetu

総合スコア419

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

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

0

自己解決

java

1 //HashMapからキーを選択してobjectに代入 2 Gage oj= gageList.get("ゾウ"); 3 4 ArrayList<Animal> animalList = oj.getAnimalList(); 5 6 System.out.println("動物名:" + animalList.get(0).getName()); 7 System.out.println("匹数:" + animalList.size() + "\n"); 8 9 Gage oj2= gageList.get("ライオン"); 10 11 ArrayList<Animal> animalList2 = oj2.getAnimalList(); 12 13 System.out.println("動物名:" + animalList2.get(0).getName()); 14 System.out.println("匹数:" + animalList2.size() + "\n"); 15 16 Gage oj3= gageList.get("らくだ"); 17 18 ArrayList<Animal> animalList3 = oj3.getAnimalList(); 19 20 System.out.println("動物名:" + animalList3.get(0).getName()); 21 System.out.println("匹数:" + animalList3.size() + "\n"); 22

このような形で回答は求められましたが、簡略化をしたいです。

現在の表示
動物名:ゾウ
匹数:2

動物名:ライオン
匹数:3

動物名:らくだ
匹数:1

投稿2019/09/24 00:55

tanaka002

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問