Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Add方法将对象添加到数组中_Java_Arrays_Methods - Fatal编程技术网

Java Add方法将对象添加到数组中

Java Add方法将对象添加到数组中,java,arrays,methods,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 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;
        }
    }
公共课{
私有字符串名称;
私立学生[]名学生;
私人int容量=40;
私人学生;
公共课程(字符串名称){
this.name=name;
}
公共课程(字符串名称,整数容量){
this.name=name;
这个。容量=容量;
}
公共int getNumberOfStudents(){
返回学生人数;
}
公共字符串getCourseName(){
返回名称;
}
公立学生{
留学生;
}
公共学生(学生新闻学生){
如果(学生人数<能力){
学生[numberOfStudents++]=新学生;
返回true;
}
返回false;
}
}
我正在尝试向
student[]
students数组添加一个新学生。我写了上面的代码。在
Student
类中,每个学生都有一个唯一的id


问题是,当我添加
newStudent
时,我想检查类中是否已经存在
newStudent
。要做到这一点,我应该使用students的id属性,因为每个学生都有自己唯一的id。我如何将其添加到do if语句中?

您需要使用循环来循环学生。像这样的。循环检查学生是否存在。如果是,则该方法将返回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;
}
public boolean addStudents(学生新闻学生){
用于(学生:学生){
if(student.getID()==newStudent.getID()){
返回false;
}
}
如果(学生人数<能力){
学生[numberOfStudents++]=新学生;
返回true;
}
返回false;
}

您需要使用循环来循环学生。像这样的。循环检查学生是否存在。如果是,则该方法将返回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;
}
public boolean addStudents(学生新闻学生){
用于(学生:学生){
if(student.getID()==newStudent.getID()){
返回false;
}
}
如果(学生人数<能力){
学生[numberOfStudents++]=新学生;
返回true;
}
返回false;
}

如果学生正确地重写了
等于
(并且,作为一种良好的实践,
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;
}
您还可以使用属性替换acessor(
getID()==s.getID()
)调用,因为您的
Student
类将有权访问私有属性(
id==s.id



如果你每堂课都有很多学生,我会按照@David的建议,使用
HashMap
或类似的数据结构,这样你就不需要遍历所有的学生(
O(n)
)来确定你是否在添加新学生。

如果学生正确覆盖
等于
(作为一种良好的实践,
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;
}
您还可以使用属性替换acessor(
getID()==s.getID()
)调用,因为您的
Student
类将有权访问私有属性(
id==s.id



如果你每堂课都有很多学生,我会按照@David的建议,使用
HashMap
或类似的数据结构,这样你就不需要遍历所有的学生(
O(n)
)了解您是否正在添加新学生。

我真的建议使用
HashMap
而不是数组。前几天我没有看到这篇文章吗?你为什么要重新发布它?这是家庭作业吗?如果不是,你应该使用David Wallace的建议。如果你想有效地做这件事,你应该使用HashSet来存储I当前在数组中的ds。添加新学员时,只需确保其id不在集合中。设置查找O(1)因此,它确实比在数组中循环要快,尤其是在数组很大的情况下!我真的建议使用
HashMap
而不是数组。前几天我没有看到这篇文章吗?你为什么要重新发布它?这是一个家庭作业吗?如果不是,你应该使用David Wallace的建议。如果你想有效地完成它,你应该使用哈希集来存储当前在数组中的id。当你添加一个新学生时,只需确保他的id不在该集中。设置查找O(1),这样比在数组中循环要快,特别是当数组很大的时候!id是两倍,所以。equals给出了一个错误。我没有这样做,而是写了“==”它是有效的。谢谢。要接受答案,只需单击复选标记。我还注意到你还没有接受过去的答案。你应该这样做,因为答案可以帮助你解决问题。id是双重的,所以。equals给出了一个错误。我没有这样做,而是写了“==”它是有效的。谢谢。要接受答案,你只需点击复选标记。我还注意到你还没有接受过去的答案。你应该这样做,因为答案可以帮助你解决问题。