回答編集履歴

1

コードの追加

2020/05/09 13:12

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -43,3 +43,249 @@
43
43
  すべての質問に答えてください。
44
44
 
45
45
  分からなければ、何が分からないのかを詳しく書いてください。
46
+
47
+
48
+
49
+ 質問に多くの人からアドバイスをもらってもそれに応えないのは
50
+
51
+ かなり混乱しているからでしょう。
52
+
53
+
54
+
55
+ ではアプローチを変えてみます。
56
+
57
+ 次のコードは思った通りに動きますか?
58
+
59
+ この問いになら返答できるでしょう。
60
+
61
+
62
+
63
+ ```Java
64
+
65
+ import java.io.*;
66
+
67
+ import java.util.*;
68
+
69
+
70
+
71
+ class Subject {
72
+
73
+ private String name;
74
+
75
+ private int score;
76
+
77
+
78
+
79
+ public Subject(String name, int score) {
80
+
81
+ this.name = name; this.score = score;
82
+
83
+ }
84
+
85
+
86
+
87
+ public String getName() { return name; }
88
+
89
+ public int getScore() { return score; }
90
+
91
+ }
92
+
93
+
94
+
95
+ class Student {
96
+
97
+ private String room;
98
+
99
+ private String name;
100
+
101
+ private List<Subject> subjects = new ArrayList<Subject>();
102
+
103
+
104
+
105
+ public Student(String room, String name) {
106
+
107
+ this.room = room; this.name = name;
108
+
109
+ }
110
+
111
+
112
+
113
+ public void add(Subject subject) { subjects.add(subject); }
114
+
115
+
116
+
117
+ public boolean equals(Object o) {
118
+
119
+ Student st = (Student)o;
120
+
121
+ return name.equals(st.name);
122
+
123
+ }
124
+
125
+
126
+
127
+ public int calcSum(){
128
+
129
+ int sum = 0;
130
+
131
+ for (Subject sj : subjects) sum += sj.getScore();
132
+
133
+ return sum;
134
+
135
+ }
136
+
137
+
138
+
139
+ public int subjectCount() { return subjects.size(); }
140
+
141
+
142
+
143
+ public String getRoom() { return room; }
144
+
145
+ public String getName() { return name; }
146
+
147
+ public List<Subject> getSubjects() { return subjects; }
148
+
149
+ }
150
+
151
+
152
+
153
+ // 読み取りクラス
154
+
155
+ class DataReader {
156
+
157
+ private List<Student> data_a = new ArrayList<Student>();
158
+
159
+
160
+
161
+ public List<Student> getData() { return data_a; }
162
+
163
+
164
+
165
+ public void readCsv() {
166
+
167
+ File fl = new File("testdata");
168
+
169
+ try (FileReader fr = new FileReader(fl);
170
+
171
+ BufferedReader in = new BufferedReader(fr)) {
172
+
173
+
174
+
175
+ String line;
176
+
177
+ while ((line = in.readLine()) != null) {
178
+
179
+ String[] data_s = line.split(",");
180
+
181
+ Student st = new Student(data_s[0], data_s[1]);
182
+
183
+ Subject sj = new Subject(data_s[2], Integer.valueOf(data_s[3]));
184
+
185
+ int i = data_a.indexOf(st);
186
+
187
+ if (i >= 0)
188
+
189
+ data_a.get(i).add(sj);
190
+
191
+ else {
192
+
193
+ st.add(sj);
194
+
195
+ data_a.add(st);
196
+
197
+ }
198
+
199
+ }
200
+
201
+ } catch (IOException ex) {
202
+
203
+ ex.printStackTrace();
204
+
205
+ }
206
+
207
+ }
208
+
209
+ public void showData() {
210
+
211
+ for (Student st : data_a) {
212
+
213
+ System.out.print(st.getRoom() + " " + st.getName() + ":");
214
+
215
+ List<Subject> subjects = st.getSubjects();
216
+
217
+ for (Subject sj : subjects)
218
+
219
+ System.out.print(" " + sj.getName() + ":" + sj.getScore());
220
+
221
+ System.out.println();
222
+
223
+ }
224
+
225
+ }
226
+
227
+
228
+
229
+ public void calcData() {
230
+
231
+ for (Student st : data_a) {
232
+
233
+ int sum = st.calcSum();
234
+
235
+ double ave = (double)sum / st.subjectCount();
236
+
237
+ System.out.println(st.getName() + ", 合計点:" + sum + ", 平均点:" + ave);
238
+
239
+ }
240
+
241
+ }
242
+
243
+ }
244
+
245
+
246
+
247
+ class Main {
248
+
249
+ public static void main(String[] args) {
250
+
251
+ DataReader reader = new DataReader();
252
+
253
+ reader.readCsv();
254
+
255
+ reader.showData();
256
+
257
+ reader.calcData();
258
+
259
+ }
260
+
261
+ }
262
+
263
+ ```
264
+
265
+ このコードは一つの例であり、質問者の要求に完全に一致するものではない
266
+
267
+ かもしれません。これを参考に自分のコードが書けるようになってほしいのです。
268
+
269
+
270
+
271
+ 回答にコードをもらった人の中には、「できました」とか「解決しました」と
272
+
273
+ いう言葉を残して去っていく人がいます。
274
+
275
+ 本当に内容を理解したのでしょうか?
276
+
277
+ そうでなければ、何の解決にもなりません。
278
+
279
+
280
+
281
+ とにかく動くコードが得られたのですから、文がどの順番に実行され、
282
+
283
+ 変数がどのように変化するのかを追っていかなければなりません。
284
+
285
+ 分からないところがあればそれを調査し、それでも分からなければ
286
+
287
+ どんどん質問しましょう。
288
+
289
+
290
+
291
+ 回答へのコメントをお願いします。