teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

コードを大きく変更しなおしたので、更新しました。

2021/07/16 02:14

投稿

K.M.PEANUTS
K.M.PEANUTS

スコア40

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 readData(String n, int j, int m, int e, int sc, int so) {
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 sum() {
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 int getAverage() {
104
+ public double getAverage() {
80
105
  int sum;
81
106
  double ave;
82
- sum = this.sum();
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 86 75 94 73 83
215
+ masaki,86,75,94,73,83
150
- nobuyuki 91 89 96 88 94
216
+ nobuyuki,91,89,96,88,94
151
- hironobu 60 54 36 59 43
217
+ hironobu,60,54,36,59,43
152
- syuji 71 68 69 71 71
218
+ syuji,71,68,69,71,71
153
- masayasu 42 31 56 42 38
219
+ masayasu,42,31,56,42,38
154
- toshiaki 66 57 63 59 68
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
- csvファイルを読み込んで配列に代入するコードはネット上に転がっていたのですが、フィールド代入する方法がわかりませんでした。
237
+ ネットで調べたのですが、どのようStringをintに変換してうく読み込まればよいのかわからなかっので教えてください