質問編集履歴
1
コードを大きく変更しなおしたので、更新しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,17 +2,18 @@
|
|
2
2
|
import java.io.*;
|
3
3
|
import java.util.*;
|
4
4
|
import java.nio.file.*;
|
5
|
+
import readData.*;
|
5
6
|
|
6
7
|
public class readAndWrite {
|
7
|
-
readData rd;
|
8
|
-
readDataBook rdbook
|
8
|
+
public void read(readData rd, readDataBook rdbook) {
|
9
|
-
public read() {
|
10
9
|
try(FileReader fr = new FileReader("data.csv")) {
|
11
10
|
BufferedReader reader = new BufferedReader(fr);
|
12
11
|
String line;
|
13
12
|
line = reader.readLine();
|
14
13
|
while (line != null) {
|
14
|
+
System.out.println(line);
|
15
|
-
rd
|
15
|
+
rd.setReadData(line);
|
16
|
+
rdbook.addReadDataBook(rd);
|
16
17
|
line = reader.readLine();
|
17
18
|
}
|
18
19
|
}catch(FileNotFoundException e) {
|
@@ -22,7 +23,31 @@
|
|
22
23
|
}
|
23
24
|
}
|
24
25
|
|
26
|
+
public void write(int num, readDataBook book) {
|
27
|
+
try (PrintWriter w = new PrintWriter(
|
28
|
+
new BufferedWriter(
|
29
|
+
new FileWriter("out.txt")))) {
|
30
|
+
//各教科の平均点を書き出す
|
31
|
+
w.println(book.japaneseAverage());
|
32
|
+
w.println(book.mathAverage());
|
33
|
+
w.println(book.englishAverage());
|
34
|
+
w.println(book.scienceAverage());
|
35
|
+
w.println(book.socialAverage());
|
36
|
+
|
37
|
+
//5教科平均点を書き出す
|
38
|
+
w.println(book.fiveAverage());
|
39
|
+
|
40
|
+
//5教科合計の1位を書き出す
|
41
|
+
w.println("1位 " + book.fiveWinPerson() + " " + book.fiveWinScore());
|
42
|
+
|
43
|
+
|
44
|
+
} catch(IOException e) {
|
45
|
+
System.out.println(e);
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
25
49
|
}
|
50
|
+
|
26
51
|
```
|
27
52
|
|
28
53
|
```java
|
@@ -37,7 +62,7 @@
|
|
37
62
|
public int science;
|
38
63
|
public int social;
|
39
64
|
|
40
|
-
public
|
65
|
+
public void setReadData(String n, int j, int m, int e, int sc, int so) {
|
41
66
|
this.name = n;
|
42
67
|
this.japanese = j;
|
43
68
|
this.math = m;
|
@@ -70,16 +95,16 @@
|
|
70
95
|
return this.social;
|
71
96
|
}
|
72
97
|
|
73
|
-
public int
|
98
|
+
public int getSum() {
|
74
99
|
int sum;
|
75
100
|
sum = this.japanese + this.math + this.english + this.science + this.social;
|
76
101
|
return sum;
|
77
102
|
}
|
78
103
|
|
79
|
-
public
|
104
|
+
public double getAverage() {
|
80
105
|
int sum;
|
81
106
|
double ave;
|
82
|
-
sum = this.
|
107
|
+
sum = this.getSum();
|
83
108
|
ave = (double)sum / 5;
|
84
109
|
return ave;
|
85
110
|
}
|
@@ -93,16 +118,22 @@
|
|
93
118
|
readData[] list = new readData[10];
|
94
119
|
int num = 0;
|
95
120
|
|
121
|
+
//読み込んだデータを配列に格納する
|
96
|
-
public addReadDataBook(readData r) {
|
122
|
+
public void addReadDataBook(readData r) {
|
97
123
|
list[num] = r;
|
98
124
|
num++;
|
99
125
|
}
|
126
|
+
//何人分のデータが格納されているかを返す
|
127
|
+
public int getNum() {
|
128
|
+
return this.num;
|
129
|
+
}
|
100
130
|
|
131
|
+
//各教科の平均点を返す
|
101
132
|
public double japaneseAverage() {
|
102
133
|
int sum = 0;
|
103
134
|
double ave;
|
104
135
|
for(int i=0; i<num; i++) {
|
105
|
-
sum += list[i].getJapanese;
|
136
|
+
sum += list[i].getJapanese();
|
106
137
|
}
|
107
138
|
return ave = sum / num;
|
108
139
|
}
|
@@ -111,7 +142,7 @@
|
|
111
142
|
int sum = 0;
|
112
143
|
double ave;
|
113
144
|
for(int i=0; i<num; i++) {
|
114
|
-
sum += list[i].getMath;
|
145
|
+
sum += list[i].getMath();
|
115
146
|
}
|
116
147
|
return ave = sum / num;
|
117
148
|
}
|
@@ -120,7 +151,7 @@
|
|
120
151
|
int sum = 0;
|
121
152
|
double ave;
|
122
153
|
for(int i=0; i<num; i++) {
|
123
|
-
sum += list[i].getEnglish;
|
154
|
+
sum += list[i].getEnglish();
|
124
155
|
}
|
125
156
|
return ave = sum / num;
|
126
157
|
}
|
@@ -129,7 +160,7 @@
|
|
129
160
|
int sum = 0;
|
130
161
|
double ave;
|
131
162
|
for(int i=0; i<num; i++) {
|
132
|
-
sum += list[i].getScience;
|
163
|
+
sum += list[i].getScience();
|
133
164
|
}
|
134
165
|
return ave = sum / num;
|
135
166
|
}
|
@@ -138,24 +169,69 @@
|
|
138
169
|
int sum = 0;
|
139
170
|
double ave;
|
140
171
|
for(int i=0; i<num; i++) {
|
141
|
-
sum += list[i].getSocial;
|
172
|
+
sum += list[i].getSocial();
|
142
173
|
}
|
143
174
|
return ave = sum / num;
|
144
175
|
}
|
145
176
|
|
177
|
+
//5教科の平均点を返す
|
178
|
+
public double fiveAverage() {
|
179
|
+
int sum = 0;
|
180
|
+
double fiveave;
|
181
|
+
for(int i=0; i<num; i++) {
|
182
|
+
sum += list[i].getSum();
|
183
|
+
}
|
184
|
+
fiveave = (double)sum / num;
|
185
|
+
return fiveave;
|
186
|
+
}
|
187
|
+
|
188
|
+
//5教科の1位の人を返す
|
189
|
+
public String fiveWinPerson() {
|
190
|
+
int winner = 0, rt = 0;
|
191
|
+
for(int i=0; i<num; i++) {
|
192
|
+
if(winner < list[i].getSum()) {
|
193
|
+
winner = list[i].getSum();
|
194
|
+
rt = i;
|
195
|
+
}
|
196
|
+
}
|
197
|
+
return list[rt].name;
|
198
|
+
}
|
199
|
+
|
200
|
+
//5教科の1位の得点を返す
|
201
|
+
public int fiveWinScore() {
|
202
|
+
int winner = 0, rt = 0;
|
203
|
+
for(int i=0; i<num; i++) {
|
204
|
+
if(winner < list[i].getSum()) {
|
205
|
+
winner = list[i].getSum();
|
206
|
+
rt = i;
|
207
|
+
}
|
208
|
+
}
|
209
|
+
return list[rt].getSum();
|
210
|
+
}
|
211
|
+
|
146
212
|
}
|
147
213
|
```
|
148
214
|
```csv
|
149
|
-
masaki
|
215
|
+
masaki,86,75,94,73,83
|
150
|
-
nobuyuki
|
216
|
+
nobuyuki,91,89,96,88,94
|
151
|
-
hironobu
|
217
|
+
hironobu,60,54,36,59,43
|
152
|
-
syuji
|
218
|
+
syuji,71,68,69,71,71
|
153
|
-
masayasu
|
219
|
+
masayasu,42,31,56,42,38
|
154
|
-
toshiaki
|
220
|
+
toshiaki,66,57,63,59,68
|
155
221
|
```
|
156
222
|
|
157
223
|
### やりたいこと
|
158
224
|
readAndWriteクラスでdata.csvを1行ずつ読み込み、readDataクラスのインスタンスのフィールドに代入してから、readDataBookクラスの配列に代入したいです。
|
159
225
|
|
160
|
-
###
|
226
|
+
### 発生しているエラー
|
227
|
+
./readAndWrite.java:14: エラー: クラス readDataのメソッド setReadDataは指定された型に適用できません。
|
228
|
+
rd.setReadData(line);
|
229
|
+
^
|
230
|
+
期待値: String,int,int,int,int,int
|
231
|
+
検出値: String
|
232
|
+
理由: 実引数リストと仮引数リストの長さが異なります
|
233
|
+
|
234
|
+
__エラー解釈__
|
235
|
+
変数lineをString型で定義しているため、引数がint型であるsetReadDataを正しく使用できていない。
|
236
|
+
|
161
|
-
|
237
|
+
ネットで調べたのですが、どのようにStringをintに変換してうまく読み込ませればよいのかわからなかったので教えてください。
|