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给出了一个错误。我没有这样做,而是写了“==”它是有效的。谢谢。要接受答案,你只需点击复选标记。我还注意到你还没有接受过去的答案。你应该这样做,因为答案可以帮助你解决问题。