私のプログラムにはエラーはありませんが、間違った学生が私のコース(アレイ)から削除されています。 3番目の生徒(James)に名前を変更すると、dropStudent行にNPEエラーが表示されます。私はそれが私のdropStudentメソッドと何か関係があるかもしれないと思うが、私はそれが 'i'と等しいインデックスでコースを通過する必要があり、そのインデックスが名前と等しいとき、それは他の2人の学生を残してnullになる。アレイから間違ったオブジェクトが削除されています
下記のコードを出力します。
package reviseCourse;
import java.util.*;
public class ReviseCourse {
public static void main(String[] args) {
// TODO Auto-generated method stub
// Create new course to enroll students in
ReviseCourse cs216 = new ReviseCourse("cs216");
// Add 3 students to the course
cs216.addStudent("William");
cs216.addStudent("Angela");
cs216.addStudent("James");
// Drop the student William from the course
cs216.dropStudent("William");
// Print course name and students individually by looping through the numberOfStudents
System.out.println("The students in the course " + cs216.getCourseName() + " are:");
for (int i = 0; i < cs216.getNumberOfStudents(); i++) {
System.out.print(students[i] + " ");
}
}
private String courseName;
private static String[] students = new String[100];
private String[] course = new String[students.length + 1];
private int numberOfStudents;
public void populateCourse() {
for (int i = 0; i < students.length; i++) {
course[i] = students[i];
System.out.println(course[i]);
}
}
public ReviseCourse(String courseName) {
this.courseName = courseName;
}
public void addStudent(String student) {
for (int i = 0; i < students.length; i++) {
course[i] = students[i];
}
students[numberOfStudents] = student;
numberOfStudents++;
}
public String[] getStudents() {
return students;
}
public int getNumberOfStudents() {
return numberOfStudents;
}
public String getCourseName() {
return courseName;
}
public void dropStudent(String student) {
for (int i = 0; i < course.length; i++) {
if (course[i].equals("William")) {
course[i] = null;
numberOfStudents--;
break;
}
}
}
// Deletes all students from the course
public void clear() {
numberOfStudents = 0;
}
}
出力:あなたのdropStudent
方法で
The students in the course cs216 are:
William Angela
出力ではまだ彼はまだそこにいるのがわかりますが、ジェームスは残っています。 – Devin
ジェームズはまだ「スチューデント」の配列にいます。あなたは 'numberOfStudents'までループしているだけなので、ループで彼を見ることはできません。 –