質問編集履歴

1

コードの記載

2020/07/04 07:35

投稿

TaWa
TaWa

スコア9

test CHANGED
File without changes
test CHANGED
@@ -1,69 +1,173 @@
1
- 複数名分の生徒を管理する生徒情報クラスの平均を求めるプログラムを書いています。同じ名前、IDある場合チェックしfalseを返すbooleanと、平均を求めるgetAverageの書き方についアドバイスをお願いします。
1
+ 複数名分の生徒情報(名前、ID)を管理平均年齢を求めるプログラムを書いています。以下のように書いてエラーはないのですが、求めた平均年齢がNaNとなってしまいます。何が間違っているのでしょうか。
2
-
3
- 独学でやっていて、調べてもやり方が一向にわからないので、参考のコードなど教えていただけると助かります。
4
2
 
5
3
 
6
4
 
7
- //1人の学生情報を扱う Studentクラスを定義
5
+ public class Main {
8
6
 
9
- public class Student{
7
+
10
8
 
11
- String name; //名前
9
+ public static void main(String[] args) {
12
10
 
13
- String studentID; //学生ID
11
+ StudentInfo student = new StudentInfo();
14
12
 
15
- int age; //年齢
13
+ student.addStudents(new Student("Taro Sato","111",21));
16
14
 
15
+ student.addStudents(new Student("Akari Kato","112",20));
17
16
 
17
+ student.addStudents(new Student("Taizo Hayashi","113",21));
18
18
 
19
- public Student(String name, String id, int age) {
19
+ student.addStudents(new Student("Hikari Watanabe","114",22));
20
20
 
21
- this.name = name;
21
+
22
22
 
23
- this.studentID = id;
23
+ double average = StudentInfo.getAverage();
24
24
 
25
- this.age = age;
25
+ System.out.println("平均年齢:"+ average);
26
26
 
27
+
28
+
27
- }
29
+ }
28
30
 
29
31
  }
30
32
 
31
33
 
32
34
 
33
- //
34
-
35
- publi複数名分の Student を管理する StudentInfo クラスを以下のように定義c class StudentInfo{
35
+ public class Student {
36
-
37
- public static final int MAX_COUNT=100; //取り扱えるStudentの最大数;
38
-
39
- Student[] students = new Student[ MAX_COUNT]; //管理するStudent
40
-
41
- int studentCount =0; //配列に格納されたStudentの数
42
-
43
- }
44
36
 
45
37
 
46
38
 
39
+ String name =""; //名前
40
+
47
- //ここからが本題、public class StudentInfoに以下を追加する。
41
+ String studentID =""; //学生ID
42
+
43
+ int age ; //年齢
44
+
45
+ public Object id;
48
46
 
49
47
 
50
48
 
51
- public boolean addStudents(Student student)
49
+ public Student(String name, String id, int age) {
52
50
 
53
- ・引数 student /Student 追加する Student
51
+ this.name = name;
54
52
 
55
- ・戻り値:追加できた時は true, 失敗したときはfalse を返す。
53
+ this.studentID = id;
56
54
 
55
+ this.age = age;
56
+
57
+ }
58
+
59
+
60
+
57
- ・目的 :StudentInfo 内の配列に Student を追加する.引数の値が null である場合,配列で扱 える最大数を超えた場合や,既に同じ情報を持つ Student が登録されている場合は, 登録されずにfalse を返す。
61
+ public String getName(){
62
+
63
+ return name;
64
+
65
+ }
66
+
67
+
68
+
69
+ public String getId(){
70
+
71
+ return studentID;
72
+
73
+ }
74
+
75
+ public int getage(){
76
+
77
+ return age;
78
+
79
+ }
80
+
81
+ }
58
82
 
59
83
 
60
84
 
61
- public double getAverage()
85
+ public class StudentInfo {
62
86
 
63
- ・引数 :なし
87
+
64
88
 
65
- ・戻値:配列に登録されてい Studentの平均値
89
+ public static int MAX_COUNT=100; //取扱えるStudentの最大数;
66
90
 
67
- ・目的 StudentInfo の配列に登録されている Student の平均年齢を算出して返
91
+ static Student[] students = new Student[MAX_COUNT]; //管理るStudent
68
92
 
93
+ static int studentCount =0; //配列に格納されたStudentの数
94
+
95
+
96
+
97
+ private Object id = " ";
98
+
99
+ private String name = null;
100
+
101
+ private int age;
102
+
103
+
104
+
105
+ //・引数 :student /Student 追加する Student
106
+
107
+ //・戻り値:追加できた時は true, 失敗したときはfalse を返す.
108
+
109
+ //・目的 :StudentInfo 内の配列に Student を追加する.引数の値が null である場合,
110
+
111
+ // 配列で扱 える最大数を超えた場合や,既に同じ情報を持つ Student が登録されている場合は,
112
+
113
+ // 登録されずにfalse を返す.
114
+
115
+
116
+
117
+ public boolean addStudents(Student student){
118
+
119
+ //引数にStudent以外のクラスが指定 された時はfalseを返す
120
+
121
+ if(student instanceof Student != true )
122
+
123
+ return false;
124
+
125
+ students[studentCount] = student;
126
+
127
+ //配列で扱える最大数を超えた場合
128
+
129
+ if(studentCount > MAX_COUNT || student == null){
130
+
131
+ return false;
132
+
133
+ }
134
+
135
+ //配列の要素を一つ一つ同じである かどうかを確認し,全て同じであれ ばtrueを返す
136
+
137
+ Student target = (Student)student;
138
+
139
+ if(this.name != target.name || this.id != target.id || this.age != target.age)
140
+
141
+ return true;
142
+
143
+ studentCount ++;
144
+
145
+ return true;
146
+
147
+ }
148
+
149
+
150
+
151
+ //・引数 :なし
152
+
153
+ //・戻り値:配列に登録されている Studentの平均値
154
+
155
+ //・目的 :StudentInfo の配列に登録されている Student の平均年齢を算出して返す.
156
+
69
- 登録されている Student がない場合は 0 を返す
157
+ // 登録され ている Student がない場合は0 を返す
158
+
159
+
160
+
161
+ public static double getAverage(){
162
+
163
+ double average = 0.0;
164
+
165
+ for(int i=0; i < studentCount; i++)
166
+
167
+ average += students[i].getage();
168
+
169
+ return average/studentCount;
170
+
171
+ }
172
+
173
+ }