如何阻止我的对象数组被覆盖?

时间:2017-10-25 19:38:47

标签: java arrays object

好的,所以这是我主要方法的一部分:

    public class Driver {
public static void main(String[] args) {
    Scanner scan=new Scanner(System.in);
   //Variables to place data attributes of object in
    String teacherName;
    int teacherId;
    double basicSalary;
    double extraPaymentRate;
    int numOfCourses=100;
    Course []coursesTaught=new Course[numOfCourses];
    String courseName;
    int courseId;
    int y;
    System.out.println("Please enter number of teachers:");
    y=scan.nextInt();
    Teacher []teacherArray=new Teacher[y];
    for(int i=0;i<y;i++) {
        System.out.println("Enter teacher’s name, id, basic salary, and extra payment rate: ");
        teacherName=scan.next();
        teacherId=scan.nextInt();
        basicSalary=scan.nextDouble();
        extraPaymentRate=scan.nextDouble();
        System.out.println("Enter number of courses taught: ");
        numOfCourses=scan.nextInt();
        for(int j=0;j<numOfCourses;j++) {
            System.out.println("Enter course names and IDs:");
            courseName=scan.next();
            courseId=scan.nextInt();
            coursesTaught[j]=new Course(courseName,courseId);
        }
        teacherArray[i]=new Teacher(teacherName,teacherId,basicSalary,extraPaymentRate,numOfCourses,coursesTaught);
    }

现在我的问题是,每次我添加一个新的教师对象时,我添加到该教师对象的新课程将覆盖最后一个。 所以老师都有相同的课程

这是老师班

public class Teacher {
       private String name;
       private int id;
       private double basicSalary;
       private double extraPaymentRate;
       public static int numOfCourses;
       public Course []coursesTaught= new Course[numOfCourses];
public Teacher() {

}
public Teacher(String name,int id,double basicSalary,double 
    extraPaymentRate,int numOfCourses,Course []coursesTaught) {
    this.name=name;
    this.id=id;
    this.basicSalary=basicSalary;
    this.extraPaymentRate=extraPaymentRate;
    Teacher.numOfCourses=numOfCourses;
    this.coursesTaught=coursesTaught;
}
//setter and getter methods here

这是课程课程

public class Course {
public String name;
public int id;
public Course() {

}
public Course(String name,int id) {
    this.name=name;
    this.id=id;
}

我还在抓住对象的概念。有什么帮助吗?

1 个答案:

答案 0 :(得分:3)

Course []coursesTaught=new Course[numOfCourses];

在循环之前声明 因此,您只需实例化一次,并且所有创建的Teacher实例在循环中使用相同的内容:

Course []coursesTaught = new Course[numOfCourses];
...
Teacher []teacherArray = new Teacher[y];
for(int i=0;i<y;i++) {
   teacherArray[i] = new Teacher(teacherName,teacherId,basicSalary,extraPaymentRate,numOfCourses,coursesTaught);
   ...
}

在创建和填充每个coursesTaught实例的循环中声明Teacher,以便在每次迭代时实例化coursesTaught,从而将其附加到当前创建的Teacher实例:

...
Teacher []teacherArray=new Teacher[y];
for(int i=0;i<y;i++) {
    Course []coursesTaught = new Course[numOfCourses];
    teacherArray[i] = new Teacher(teacherName,teacherId,basicSalary,extraPaymentRate,numOfCourses,coursesTaught);
    ...
}