Java 用对象替换空数组

Java 用对象替换空数组,java,Java,代码 据我所知,由于数组已初始化,其内容为空。我正在尝试编写一个名为 public boolean注册(学生){…} 以将空值替换为成功注册课程的学生的姓名。如果不使用列表,这是可能的吗 数组已初始化且不为null,但数组的条目为null。 不使用列表是可能的(但会更简单)。 您需要存储额外的信息,即注册的学生人数 public Course(Professor professor, String courseName) { this.professor = professor;

代码

据我所知,由于数组已初始化,其内容为空。我正在尝试编写一个名为

public boolean注册(学生){…}


以将空值替换为成功注册课程的学生的姓名。如果不使用列表,这是可能的吗

数组已初始化且不为null,但数组的条目为null。 不使用列表是可能的(但会更简单)。 您需要存储额外的信息,即注册的学生人数

public Course(Professor professor, String courseName) {
    this.professor = professor;
    this.courseName = courseName;
    this.students = new Student[100];
}
你还需要考虑当有超过100名学生时应该发生什么?

这基本上就是
ArrayList
所做的,其优点是,如果数据太多,它会自动增加数组。如果您在advanced中知道将有多少个条目,可以使用
ArrayList(int initialCapacity)
来避免不必要的复制:

int numberOfStudents = 0;

public boolean enroll(Student student) 
{
  if(numberOfStudents >= 100) return false;

  students[numberOfStudents] = student;
  numberOfStudents++;
  return true;
}
List student=newarraylist(100);
公共布尔值注册(学生)
{
返回学生。添加(学生);
}

数组实际初始化为100个
null
对象,索引为0到99

因此,假设
enroll()
方法是
课程
类的一部分,每当它存储一个非
null
学生
对象时返回
true
,它可以实现如下:

List<Student> students = new ArrayList<Student>(100);

public boolean enroll(Student student) 
{
  return students.add(student);
}
其中,
this.counter
是初始化
students
数组后,构造函数中初始化为
0
的整数

更好的方法是使用
ArrayList
而不是数组,以避免每次都检查大小,并且没有最大大小限制。在这种情况下,
this.students
将初始化为

public boolean enroll(Student s) {
  if ((s == null) || (this.counter >= 100)) {
    return false;
  }
  this.students[this.counter] = s;  
  ++this.counter;
  return true;
}

无需计数器。

您可以通过两种方式注册学生:

  • 使用
    ArrayList
    而不是array,这样,您就不需要在每次调用
    enroll
    时跟踪最后一个条目或迭代数组,例如:

    公共课程(教授,字符串课程名称){
    这个。教授=教授;
    this.courseName=courseName;
    this.students=new ArrayList();
    }

    public void注册(学生){
    此.students.add(s);
    }

  • 使用数组并迭代查找最后一个
    null
    位置,例如:

    public void注册(学生){
    if(null==s)返回;
    
    对于(int i=0;iIt,最好使用可以根据需要增长的
    ArrayList
    。但是,要用数组实现它,只需跟踪
    numStudent
    ,以便知道将新学生放在哪个索引。数组不是空的,但数组中的对象是空的。数组是用
    new student初始化的[100]
    “由于数组仅声明且未初始化”,但它已初始化-数组不为空,条目为。是的,您可以按要求执行
    学生[i]=new Student()是的,这是我的第一个方法,但由于作业是通过机器评分的,我必须使用标准数组来计算。谢谢你的解决方案!
    
    List<Student> students;
    ...
    this.students = new ArrayList<Student>();
    
    public boolean enroll(Student s) {
      if (s == null) {
        return false;
      }
      this.students.add(s);  
      return true;
    }