代码;
public Course(Professor professor, String courseName) {
this.professor = professor;
this.courseName = courseName;
this.students = new Student[100];
}
根据我的理解,因为数组已初始化,其内容为null。我正在尝试编写一个名为
的方法 public boolean enroll(Student s){...}
为了将null值替换为在课程中成功注册的学生的姓名。这可能不使用列表吗?
答案 0 :(得分:6)
数组已初始化且不为null,但数组的条目为null。 没有使用列表是可能的(但它会更简单)。 您需要存储额外信息,注册了多少学生。
int numberOfStudents = 0;
public boolean enroll(Student student)
{
if(numberOfStudents >= 100) return false;
students[numberOfStudents] = student;
numberOfStudents++;
return true;
}
你还需要考虑当有超过100名学生时会发生什么?
这基本上是ArrayList
的作用,如果数据太多,它会自动增长数组。如果你知道将会有多少条目,你可以使用ArrayList(int initialCapacity)
来避免不必要的复制:
List<Student> students = new ArrayList<Student>(100);
public boolean enroll(Student student)
{
return students.add(student);
}
答案 1 :(得分:5)
实际上,数组被初始化为100个null
Student
个对象,索引为0到99.
因此,假设enroll()
方法是Course
类的一部分,每当存储非true
null
对象时返回Student
,可以按如下方式实施:
public boolean enroll(Student s) {
if ((s == null) || (this.counter >= 100)) {
return false;
}
this.students[this.counter] = s;
++this.counter;
return true;
}
其中this.counter
是在0
数组初始化后,在构造函数中初始化为students
的整数。
更好的方法是使用ArrayList
而不是数组,以避免每次都检查大小并且没有最大大小限制。在这种情况下,this.students
将初始化为
List<Student> students;
...
this.students = new ArrayList<Student>();
并且enroll()
的实施将简化为
public boolean enroll(Student s) {
if (s == null) {
return false;
}
this.students.add(s);
return true;
}
无需柜台。
答案 2 :(得分:1)
您可以通过两种方式注册学生:
使用ArrayList
代替数组,这样,每次调用enroll
时,您都不需要跟踪最后一个条目或遍历数组,例如:
public Course(Professor professor, String courseName) {
this.professor = professor;
this.courseName = courseName;
this.students = new ArrayList<Student>();
}
public void enroll(Student s){
this.students.add(s);
}
使用数组并遍历它以找出最后null
个位置,例如:
public void enroll(Student s){
if(null == s) return;
for(int i=0 ; i<this.students.length ; i++){
if(this.students[i] == null){
this.students[i] = s;
return;
}
}
}
在这种方法中,您还将跟踪所有100名学生是否已经注册。