以下是示例:
public class Course {
private String name;
private Student[] students;
private int capacity=40;
private int numberOfStudents;
public Course(String name){
this.name=name;
}
public Course(String name, int capacity){
this.name= name;
this.capacity= capacity;
}
public int getNumberOfStudents(){
return numberOfStudents;
}
public String getCourseName(){
return name;
}
public Student[] getStudents(){
return students;
}
public boolean addStudents(Student newStudent){
if(numberOfStudents < capacity){
students[numberOfStudents++] = newStudent;
return true;
}
return false;
}
}
我正在尝试为Student[]
学生阵列添加新学生。我写了上面的代码。在Student
课程中,每个学生都有一个唯一的ID。
问题在于,当我添加newStudent
时,我想检查班级中是否已存在newStudent
。要做到这一点,我应该使用学生的id属性,因为每个学生都有自己独特的id。如何将其添加到if if语句?
答案 0 :(得分:3)
您需要使用循环来循环学生。像这样的东西。循环检查学生是否存在。如果是,则该方法将返回false而不添加学生。
public boolean addStudents(Student newStudent){
for (Student student : students){
if (student.getID() == newStudent.getId()){
return false;
}
}
if(numberOfStudents < capacity){
students[numberOfStudents++] = newStudent;
return true;
}
return false;
}
答案 1 :(得分:1)
如果学生正确覆盖equals
(并且,作为一种良好做法,hashCode
),您可以执行以下操作:
public boolean addStudents(Student newStudent){
if(numberOfStudents < capacity && isNew(newStudent)){
students[numberOfStudents++] = newStudent;
return true;
}
return false;
}
public boolean isNew(Student student) {
for (int i = 0; i < numberOfStudents; i++) {
if (students[i].equals(student)
return false;
}
return true;
}
对学生重写equals
方法:
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj == this)
return true;
if (!(obj instanceof Student))
return false;
Student s = (Student) obj;
return getID() == s.getID()
|| (getID() != null && getID.equals(s.getID())) // skip if id is a primitive
}
您还可以使用属性替换acessors(getID() == s.getID()
)调用的使用,因为您的Student
类可以访问私有属性(id == s.id
)。
如果每个班级有很多学生,我会遵循@David建议并使用HashMap
或类似的数据结构,这样您就不需要遍历所有班级学生({{1} })了解你是否正在增加一名新学生。