質問編集履歴

2

問題点の追記

2020/07/16 14:46

投稿

TaWa
TaWa

スコア9

test CHANGED
File without changes
test CHANGED
@@ -238,4 +238,8 @@
238
238
 
239
239
 
240
240
 
241
- students[0].getname()や.getage()であれば要素を取り出せるのですが、students[studenCount].getname()やstudents[i].getname()だと要素を取り出せません。iやstudentCountはループで回したりカウントアップしているのに0などの数字と何か違いがあるのでしょうか。
241
+ students[0].getname()や.getage()であれば要素を取り出せるのですが、students[studenCount].getname()やstudents[i].getname()だと要素を取り出せません。
242
+
243
+ また、students[studenCount]=studentとした場合はnullになるのですが、students[0]=studentとした場合は中身があり、getname()や.getage()であれば要素を取り出せます。
244
+
245
+ iやstudentCountはループで回したりカウントアップしているのに0などの数字と何か違いがあるのでしょうか。

1

プログラムを修正しました

2020/07/16 14:46

投稿

TaWa
TaWa

スコア9

test CHANGED
File without changes
test CHANGED
@@ -44,17 +44,9 @@
44
44
 
45
45
  public static final int MAX_COUNT=100; //取り扱えるStudentの最大数;
46
46
 
47
- static Student[] students = new Student[ MAX_COUNT]; //管理するStudent
47
+ Student[] students = new Student[ MAX_COUNT]; //管理するStudent、ここに
48
-
48
+
49
- static int studentCount =0; //配列に格納されたStudentの数
49
+ int studentCount =0; //配列に格納されたStudentの数
50
-
51
-
52
-
53
- public String id ="";//初期化
54
-
55
- public String name ="";
56
-
57
- public int age =0 ;
58
50
 
59
51
 
60
52
 
@@ -72,51 +64,103 @@
72
64
 
73
65
  public boolean addStudents(Student student){
74
66
 
75
-
67
+ System.out.println("0studentCount開始"+studentCount);
68
+
69
+ if(studentCount==0){
70
+
71
+ students[studentCount] = student;
72
+
73
+ studentCount++;
74
+
75
+ System.out.println("1"+students[0].getname());//チェック1
76
+
77
+ System.out.println("1"+students[0].getage());
78
+
79
+ System.out.println("1"+students[0].getid());
80
+
81
+ System.out.println("1studentCount開始"+studentCount);
82
+
83
+ }else{
84
+
85
+
86
+
87
+ System.out.println("2"+student.getname());//チェック2
88
+
89
+ System.out.println("2"+student.getage());
90
+
91
+ System.out.println("2"+student.getid());
92
+
93
+ System.out.println("2studentCount開始"+studentCount);
94
+
95
+
96
+
97
+ }
76
98
 
77
99
  //引数にStudent以外のクラスが指定 された時はfalseを返す
78
100
 
79
- if(student instanceof Student != true )
101
+ if(student instanceof Student != true ){
102
+
80
-
103
+ System.out.println("3if(student instanceof Student != true )"); //チェック3
104
+
81
- return false;
105
+ return false;
106
+
107
+ }
108
+
109
+ System.out.println("4if(student instanceof Student != true )抜けた"); //チェック4
82
110
 
83
111
 
84
112
 
85
- //配列で扱える最大数を超えた場合
113
+ //配列で扱える最大数を超えた場合
86
-
114
+
87
- if(studentCount > MAX_COUNT || student == null){
115
+ if(studentCount > MAX_COUNT || student == null){
116
+
88
-
117
+ System.out.println("5if(studentCount > MAX_COUNT || student == null)"); //チェック5
118
+
89
- return false;
119
+ return false;
90
-
120
+
91
- }
121
+ }
122
+
92
-
123
+ System.out.println("6if(studentCount > MAX_COUNT || student == null)抜けた"); //チェック6
124
+
93
- //配列の要素を一つ一つ同じである かどうかを確認し,全て同じであれ ばtrueを返す
125
+ //配列の要素を一つ一つ同じである かどうかを確認し,全て同じであれ ばtrueを返す
94
-
95
- Student target = (Student)student;
126
+
96
-
97
-
127
+
98
128
 
99
129
  //for文で重複チェック
100
130
 
101
131
  for(int i=0; i<=studentCount; i++){
102
132
 
133
+
134
+
103
- if(this.name.equals(target.name) && (this.id.equals(target.id)) && this.age == target.age)
135
+ //if(student.getname().equals(students[i].getname()) && student.getid().equals(students[i].getid()) && student.getage() == students[i].getage()){
136
+
104
-
137
+ if(student.equals(students[i])){
138
+
139
+
140
+
141
+ return true;
142
+
143
+ }
144
+
145
+ }
146
+
147
+ students[studentCount] = student;//student[studentCount]にstudentを代入
148
+
149
+ studentCount++;
150
+
151
+ System.out.println("7-1"+student.getname()); //チェック7-1
152
+
153
+ System.out.println("7-2"+students[0].getname()); //チェック7-2
154
+
155
+ System.out.println("8studentCount一周終わり"+studentCount); //チェック8
156
+
157
+
158
+
105
- return false;
159
+ return false;
106
-
160
+
107
- }
161
+ }
108
-
109
- students[studentCount] = student;//student[studentCount]にstudentを代入
162
+
110
-
111
- studentCount++;
163
+
112
-
113
- System.out.println(studentCount);
114
-
115
- return true;
116
-
117
- }
118
-
119
-
120
164
 
121
165
  //・引数 :なし
122
166
 
@@ -124,24 +168,28 @@
124
168
 
125
169
  //・目的 :StudentInfo の配列に登録されている Student の平均年齢を算出して返す.
126
170
 
127
- // 登録され ている Student がない場合は0 を返す.
171
+ // 登録され ている Student がない場合は0 を返す.
128
-
129
-
130
-
172
+
173
+
174
+
131
- public static double getAverage(){
175
+ public double getAverage() {
132
176
 
133
177
  double average = 0.0;
134
178
 
135
- for(int i=0; i < studentCount; i++)
179
+ for (int i = 0; i < this.studentCount; i++)
136
-
180
+
137
- average += (double)students[i].getage();
181
+ average += (double) this.students[i].getage();
182
+
138
-
183
+ //System.out.println( average += (double) this.students[i].getage()); //チェック9
184
+
139
- System.out.println(average/studentCount);
185
+ System.out.println("9平均"+average / this.studentCount); //チェック
140
-
186
+
141
- return average/studentCount;
187
+ return average / this.studentCount;
142
188
 
143
189
  }
144
190
 
191
+ }
192
+
145
193
 
146
194
 
147
195
  import static org.junit.Assert.*;
@@ -190,26 +238,4 @@
190
238
 
191
239
 
192
240
 
193
- おそらく、StudentInfoの中になる以下の部分の記載が間違っているのではないかとは考えているのですが、どう直したらいいのかわかりません。
194
-
195
- for(int i=0; i<=studentCount; i++){
196
-
197
- if(this.name.equals(target.name) && (this.id.equals(target.id)) && this.age == target.age)
198
-
199
- return false;
200
-
201
- }
202
-
203
- students[studentCount] = student;//student[studentCount]studentを代入
241
+ students[0].getname()や.getage()であれば要素を取り出せるのですが、students[studenCount].getname()やstudents[i].getname()だと要素を取り出せません。iやstudentCountはループで回したりカウントアップしているの0などの数字と何か違いがあるのでしょうか。
204
-
205
- studentCount++;
206
-
207
- System.out.println(studentCount);
208
-
209
- return true;
210
-
211
- }
212
-
213
-
214
-
215
- それとも他の場所に問題がありますでしょうか。どこをどのように直せばいいのか、具体的にアドバイスいただければ幸いです。