0

我有 3 个课程CourseCourseEntryTranscript。在成绩单中,我有一个添加课程的功能,比如:

public class Transcript {
    CourseEntry coursestaken[] = new CourseEntry[6];

    public void addCourse(Course course)
    {
        coursestaken[lastIndexOf(getCoursestaken())] = new CourseEntry(course);
    }
    (lastIndexOf gives me the empty array index - it's working on)

在我的CourseEntry

public class CourseEntry {
    Course course;
    char grade = 'I';

    public CourseEntry(Course course)
    {
        this.course = course;
    }

在我的Course

public  class Course {
    int courseNumber,credits;
    String courseName;

    public Course addNewCourse(int courseNumber, int credits, String courseName)
    {
        this.courseNumber = courseNumber;
        this.credits = credits;
        this.courseName = courseName;

        return this;
    }

在我的主要:

Transcript t = new Transcript();
Course course = new Course();

Course matematik = course.addNewCourse(1, 2, "Matematik");
t.addCourse(matematik);

Course turkce = course.addNewCourse(1, 4, "Türkçe");
t.addCourse(turkce);

但是如果我循环 coursetaken 数组,它会打印最后插入的所有索引。

我该如何解决?

谢谢

4

2 回答 2

7

您需要Course为每门课程创建一个新对象,您的addNewCourse方法只会改变当前Course对象。Course像这样修改:

public class Course {
    private final int courseNumber;
    private final int credits;
    private final String courseName;

    public Course(int courseNumber, int credits, String courseName) {
        this.courseNumber = courseNumber;
        this.credits = credits;
        this.courseName = courseName;
    }

    public int getCourseNumber() {
        return courseNumber;
    }

    public int getCredits() {
        return credits;
    }

    public String getCourseName() {
        return courseName;
    }
}

然后使用以下内容:

Transcript t = new Transcript();

Course matematik = new Course(1, 2, "Matematik");
t.addCourse(matematik);

Course turkce = new Course(1, 4, "Türkçe");
t.addCourse(turkce);
于 2013-01-15T21:04:30.050 回答
3

对象是Java中的引用,即指向对象的指针。所以当你这样做时:

Object a = new Object();
Object b = a;

您不是将整个对象复制ab,而是将引用a复制到b(内存地址)。所以ab都是对创建的对象的引用new

让我们按照您的代码来看看发生了什么:

Course course = new Course();
Course matematik = course.addNewCourse(1, 2, "Matematik");
    this.courseNumber = courseNumber;
    this.credits = credits;
    this.courseName = courseName;
    return this;

在这里你修改了course对象。matematiknow 也一样,course因为它指向同一个对象。

Course turkce = course.addNewCourse(1, 4, "Türkçe");

在这里你course再次修改。现在courseturkcematematik引用同一个对象,您首先使用Course course = new Course();.

我认为解决这个问题的最简单方法是创建一个带参数的构造函数:

public class Course {
...
     public Course(int courseNumber,int credits,String courseName) {
           this.courseNumber = courseNumber;
           this.credits = credits;
           this.courseName = courseName;
     }
}

接着

  Course matematik = new Course(1, 2, "Matematik");
  t.addCourse(matematik);

  Course turkce = new Course(1, 4, "Türkçe");
  t.addCourse(turkce);
于 2013-01-15T21:12:35.413 回答