添加方法以将对象添加到数组

时间:2013-12-27 17:04:29

标签: java arrays methods

以下是示例:

 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语句?

2 个答案:

答案 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} })了解你是否正在增加一名新学生。