如何通过addCourse()方法将Course对象添加到数组中

时间:2015-03-27 14:51:06

标签: java arrays

我遇到了对象和类的问题。

我必须定义两个类:

  • Course:课程有代码,名称和学分数
  • Teacher:老师有名字和姓氏。他可以被问到他的全名。

到目前为止一切顺利,我对它们没有任何问题,但是我必须做下一次我在过去2天试图做的任务,但我找不到合适的答案:

  

扩展班主任的代码。老师也有他可以教授的课程清单。在代码中添加一系列课程。还要在代码中添加函数addCourse(Course aCourse)。课程也可以从教师中删除。

我可以按照自己的方式做各事,但不知道如何创建addCourse(Course aCourse)方法。

在下面查找我的编码,但必须按照所描述的方法:

public class Course {

    private String courseCode;
    private String courseName;
    private String numberOfCredits;

    public Course(String courseCode, String courseName, String numberOfCredits) {
        super();
        this.courseCode = courseCode;
        this.courseName = courseName;
        this.numberOfCredits = numberOfCredits;
    }

    public void print() {
        System.out.println(courseCode + "\t" + courseName + "\t" + numberOfCredits);
    }

    public static void main(String[] args) {

        Course[] courseArray = new Course[4];

        System.out.println("Code" + "\t" + "Name" + "\t" + "Credits");

        courseArray[0] = new Course("001", "Hist", "3");
        courseArray[1] = new Course("002", "Phy", "3");
        courseArray[2] = new Course("003", "Math", "3");
        courseArray[3] = new Course("004", "Log", "3");

        for (int i = 0; i < courseArray.length; i++) {
            courseArray[i].print();
        }

    }
}

3 个答案:

答案 0 :(得分:1)

数组是固定长度的对象集合,因此您需要确定数组的大小。我们调用数组MAX_COURSES的长度。更高级的解决方案可能会在需要时调整阵列大小,但我觉得这超出了您的课程范围。

因此,您需要将Course[]数组定义为Teacher类的字段。数组声明的语法是quite easy to research,所以我不会把它放在这里。只需确保您的数组长度等于MAX_COURSES

现在,要向阵列添加课程,您需要知道将它们放在何处。要跟踪数组的下一个自由位置,最简单的方法是在类中声明一个字段:

private int numCourses = 0;

现在,当您添加新课程时,请将课程插入numCourses指定的索引中。确保在添加课程后增加numCourses

最后,您应该在同意在阵列中插入新课程之前测试您的阵列是否已满,即检查numCourses是否小于MAX_COURSES。如果不是,则需要抛出异常。

答案 1 :(得分:1)

我建议使用集合(例如List)而不是数组。代码看起来像:

public class Teacher {
    private final String firstName;
    private final String lastName;
    private final List<Course> courses = new ArrayList<Course>();

    public Teacher(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public void addCourse(Course course) {
        courses.add(course);
    }
}

基于该示例,您应该能够自己添加removeCourse方法,以及在课程列表中操作所需的任何其他方法。

如果要将列表作为数组返回,可以随时转换它,例如:

public Course[] getCourses() {
    return courses.toArray(new Course[courses.size()]); 
}

如果你真的需要根据你的作业使用一个数组结构,你可以在添加和删除课程时尝试,从课程数组中构建一个列表,从该列表中添加或删除一个课程,将列表转换回一系列课程。

答案 2 :(得分:0)

这里有3个选项。

选项1

如果您允许使用List构造:

private List<Course> courses = new ArrayList<Course>();

public void addCourse(Course aCourse)
{
    if (aCourse == null)
    {
        return;
    }

    courses.add(aCourse);
}

选项2

使用数组,但它没有扩展。假设教师最多只能有X门课程,在我的例子10中:

// Yes, I stole Duncan's variable names

private final int MAX_COURSES = 10;

private int numCourses = 0;
private Course[] courses = new Course[MAX_COURSES]; 

public void addCourse(Course aCourse) {
    if (aCourse == null)
    {
        return;
    }

    if (numCourses >= courses.length)
    {
        return;
    }

    courses[numCourses] = aCourse;
    numCourses++;
}

选项3

这与前一项相同,但有点聪明,因为它可以通过使用静态方法Arrays.copyOf

创建一个新数组来调整数组的大小...
// Yes, I stole Duncan's variable names

private final int MAX_COURSES = 10;

private int numCourses = 0;
private Course[] courses = new Course[MAX_COURSES]; 

public void addCourse(Course aCourse) {
    if (aCourse == null)
    {
        return;
    }

    if (numCourses >= courses.length)
    {
        int size = courses.length * 2;
        courses = Arrays.copyOf(courses, size);
    }

    courses[numCourses] = aCourse;
    numCourses++;
}