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

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

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

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

Q&A

解決済

2回答

3206閲覧

java Mapを使って点数を表示する MapDate

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2016/05/02 04:34

編集2016/05/02 06:29

javaにてMapを使って名前と教科を入力すると点数が出力されるプログラムを組んでいます。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class test34 {
public static void main(String[] args) throws IOException {
Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("名前を入力してください"); String strx = br.readLine(); System.out.println("教科を入力してください"); String stry = br.readLine(); Map<String, String> treeMap = new HashMap<String, String>(); map.get(treeMap); // 田中 treeMap.put("国語", "100"); treeMap.put("英語", "80"); treeMap.put("理科", "50"); treeMap.put("社会", "30"); // 加藤 treeMap.put("国語", "30"); treeMap.put("英語", "40"); treeMap.put("理科", "70"); treeMap.put("社会", "90"); // 森田 treeMap.put("国語", "50"); treeMap.put("英語", "90"); treeMap.put("理科", "100"); treeMap.put("社会", "0"); // 北国 treeMap.put("国語", "0"); treeMap.put("英語", "10"); treeMap.put("理科", "70"); treeMap.put("社会", "30"); // treeMap map.put("田中", treeMap); map.put("加藤", treeMap); map.put("森田", treeMap); map.put("北国", treeMap); if (map.containsKey(strx)) { if (treeMap.containsKey(stry)) System.out.println(treeMap.get(stry)); } else { System.out.println("データがありません"); } }

}

‐出力イメージ‐
名前:田中
国語:100

エラーは出ていませんがこのままでは北国の点数のみ出力されます。どのように手を加えていけばよいかアドバイスいただけたらと思っています。

//追記
おそらくマップデータのところが違うと思っていますがどう書き換えればよいかが分かっていません。

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

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

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

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

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

guest

回答2

0

ベストアンサー

java

1Map<String, String> treeMap = new HashMap<String, String>(); 2// map.get(treeMap); // <- この行で何をしたいのか明確になってますか? 3 4// 田中 5treeMap.put("国語", "100"); 6treeMap.put("英語", "80"); 7treeMap.put("理科", "50"); 8treeMap.put("社会", "30"); 9// treeMapの中身は田中の成績(key:科目名, value:点数)になってます。 10// このtreeMapをkey:田中の名前, value:treeMapの形でmapに登録しなければならないのでは? 11map.put("田中", treeMap); 12 13// 次は加藤の成績(key:科目名, value:点数)を登録しなければならないのでtreeMapは初期化します。 14treeMap = new HashMap<String, String>(); 15 16// 加藤 17treeMap.put("国語", "30"); 18treeMap.put("英語", "40"); 19treeMap.put("理科", "70"); 20treeMap.put("社会", "90"); 21// treeMapの中身は加藤の成績(key:科目名, value:点数)になってます。 22// このtreeMapをkey:加藤の名前, value:treeMapの形でmapに登録しなければならないのでは? 23map.put("加藤", treeMap); 24 25// 以下略 26

投稿2016/05/02 06:38

tkturbo

総合スコア5572

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

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

退会済みユーザー

退会済みユーザー

2016/05/02 07:02

ご回答ありがとうございます。 キーと値を一人ずつこのようにMapに登録すればよかったのですね。 しかしまだバラバラの点数が出力されます。 if文が誤っているのでしょうか…
tkturbo

2016/05/02 07:13 編集

if (map.containsKey(strx)) { // <- ここでstrx="田中"と仮定 // 最後にtreeMapに成績をセットしたのは北国君のもの。 treeMap = map.get(strx); // <- こうしなければ田中の成績は取れませぬ。 if (treeMap.containsKey(stry))
退会済みユーザー

退会済みユーザー

2016/05/02 07:46

まだ北国Mapからしか値が取れません… デバックでも確認しました。
tkturbo

2016/05/02 08:05

「 // treeMap map.put("田中", treeMap); map.put("加藤", treeMap); map.put("森田", treeMap); map.put("北国", treeMap); // ↑こんな風にまとめてputしてるから最後に処理した北国君の成績で上書きされてるんです。 // (1)各人の成績マップ作成→(2)各人の名前をキーにmapに成績マップをセット // →各人のデータで(1)(2)を繰り返し、としないと北国君の成績しかとれませんね。
退会済みユーザー

退会済みユーザー

2016/05/02 08:19

まさにその通りでした。 最後にまとめて、そして2回も処理通ってたら嫌でも北国の成績になりますね… お手数をおかけして申し訳ありませんでした。
guest

0

同じMapに教科-点数のマッピングを繰り返しているため、上書きされます。
各人ごとに教科-点数のMapを用意する必要があります。


java

1// 2 // 田中 3 treeMap.put("国語", "100"); 4 treeMap.put("英語", "80"); 5 treeMap.put("理科", "50"); 6 treeMap.put("社会", "30"); 7 8 map.put("田中", treeMap); // ここで"田中"という名前と入力した教科-点数を結びつける 9 10 treeMap = new HashMap<String, String>(); //次の"加藤"用に新たに教科-成績マップを作成 11 12 // 加藤 13 treeMap.put("国語", "30"); // 上記の新規マップ作成をしないと、田中の点数がここで上書きされてしまう 14 treeMap.put("英語", "40"); 15 treeMap.put("理科", "70"); 16 treeMap.put("社会", "90"); 17 18 map.put("加藤", treeMap); // ここで"加藤"という名前と入力した教科-点数を結びつける

投稿2016/05/02 04:56

編集2016/05/02 06:43
swordone

総合スコア20649

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

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

退会済みユーザー

退会済みユーザー

2016/05/02 06:15

回答ありがとうございます。 具体的にどのように作ればいいか教えていただけたらありがたいです。
退会済みユーザー

退会済みユーザー

2016/05/02 08:21

ご回答ありがとうございます。 遅くなってしまい申し訳ありません。 新しくMapを作成しなかったら上書きされ続けるだけで北国の成績しか出ませんでした。 お手数おかけして申し訳ありません。そしてありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問