CSVデータを一行ずつ読み込み一行を","で区切って配列に代入し、配列の[2](問題番号を表す)、[4](スコアを表す)、その問題番号[2]でそのスコア[4]の人数をHashMap<String, <String, Integer>>に追加していきたいのですが、
java
1HashMap<String, HashMap<String, Integer>> map = new HashMap<>(); //mapの宣言 2HashMap<String, Integer> scores = new HashMap<>(); 3File file = new File(args[0]); //引数のファイルの実体を作成 4 BufferedReader in = new BufferedReader(new FileReader(file)); 5String line; 6while((line = in.readLine()) != null){ //一行ずつファイルを読みこむ 7 String[] array = line.split(","); //1行をコンマで区切る 8 if(!map.containsKey(array[2]) || !map.get(array[2]).containsKey(array[4])){ 9 scores.put(array[4], 1); 10 map.put(array[2], scores); 11 System.out.println("問題番号:"+ array[2] + "スコア" + array[4] + "人数" + 1); 12 } 13 else{ 14 Integer number_p = map.get(array[2]).get(array[4]); 15 number_p += 1; 16 map.get(array[2]).put(array[4], number_p); 17 System.out.println("問題番号"+array[2] + "スコア"+array[4] + "人数"+number_p); 18 } 19 }
これで実行したところ、問題番号が変わっても1つ前の問題番号のスコアが反映されて人数がおかしくなります。
どのように書けば、HashMap<問題番号, <スコア, 人数>>を作ることができるのでしょうか。
教えていただきたいです。
↓追記です
java
1import java.io.*; 2import java.util.HashMap; 3import java.util.Map; 4import java.util.Objects; 5import java.util.ArrayList; 6public class ScoreAnalyzer2{ 7 public static void main(String args[]) throws IOException{ //mainメソッド 8 ScoreAnalyzer2 app = new ScoreAnalyzer2(); 9 app.run(args); 10 } 11 void run(String args[]) throws IOException{ //runメソッド 12 HashMap<String, HashMap<String, Integer>> map = new HashMap<>(); //mapの宣言 13 HashMap<String, Integer> map2 = new HashMap<>(); //スコアと0 14 15 ArrayList<String> list = new ArrayList<>(); 16 File file = new File(args[0]); //引数のファイルの実体を作成 17 BufferedReader in = new BufferedReader(new FileReader(file)); 18 String line; 19 while((line = in.readLine()) != null){ //一行ずつファイルを読みこむ 20 String[] array = line.split(","); //1行をコンマで区切る 21 if(!map.containsKey(array[2]) || !map.get(array[2]).containsKey(array[4])){ 22 HashMap<String, Integer> scores = new HashMap<>(); 23 scores.put(array[4], 1); 24 map.put(array[2], scores); 25 System.out.println("問題番号:"+ array[2] + "スコア" + array[4] + "人数" + 1); 26 } 27 else{ 28 Integer number_p = map.get(array[2]).get(array[4]); 29 number_p += 1; 30 map.get(array[2]).put(array[4], number_p); 31 System.out.println("問題番号"+array[2] + "スコア"+array[4] + "人数"+number_p); 32 } 33 } 34 }
最終的にはそれぞれの問題番号のスコアごとに割合も算出したいです。
2019/4/11 reading 1 24 10 9:30 9:31
2019/4/11 reading 1 102 10 9:30 9:40
2019/5/16 reading 5 96 8 9:03 9:09
2019/5/16 reading 5 117 10 9:03 9:07
2019/5/16 reading 5 44 10 9:03 9:09
2019/5/9 reading 4 37 8 9:02 9:09
2019/5/9 reading 4 56 6 9:02 9:07
2019/5/9 reading 4 114 8 9:02 9:10
2019/5/9 reading 4 58 8 9:03 9:10
2019/4/25 reading 3 59 8 9:00 9:12
2019/4/25 reading 3 144 6 9:03 9:11
2019/4/25 reading 3 107 8 9:07 9:13
2019/4/25 reading 3 74 2 9:11 9:14
2019/4/18 reading 2 73 2 9:00 9:13
2019/4/18 reading 2 105 8 9:00 9:10
2019/4/18 reading 2 96 6 9:00 9:07
データは一部抜粋です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/28 15:23
2019/07/28 15:25
2019/07/28 16:24
2019/07/28 16:28
2019/07/28 16:33
2019/07/28 22:41
2019/07/29 01:15
2019/07/29 06:27
2019/07/30 15:19