用对象替换null数组

时间:2017-03-11 00:14:26

标签: java

代码;

public Course(Professor professor, String courseName) {
    this.professor = professor;
    this.courseName = courseName;
    this.students = new Student[100];
}

根据我的理解,因为数组已初始化,其内容为null。我正在尝试编写一个名为

的方法

public boolean enroll(Student s){...}

为了将null值替换为在课程中成功注册的学生的姓名。这可能不使用列表吗?

3 个答案:

答案 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名学生是否已经注册。