循环对象私有数组

时间:2014-02-14 23:07:20

标签: java arrays loops

我确信我的循环代码是错误的,但对于我的生活,我看不出它是什么。

我必须创建一个Student(String name, double gpa)对象。

我有一个类Classroom,用于初始化私有数组students[]。我问用户要创建多少学生。使用循环,我要求每个学生的名称和gpa,并使用add(Student aStudent)方法将其添加到数组中。我的方法应该检查单元格是否为空。如果是,请添加对象。如果没有,请转到下一个单元格。我无法创建多个Student对象。

我还有一个get方法来返回特定数组单元格的引用。

以下是课程Classroomaddget方法。变量由赋值设置。

public class Classroom {

    private boolean hasSpace = false;
    int maxClassroomSize;
    private Student students[];

    public Classroom (int size){
        maxClassroomSize = size;
        students = new Student[maxClassroomSize];


    }



    public boolean add (Student aStudent) {
        for(int i = 0; i <=(students.length-1); i++)
        {
            if (students[i] == null) {
                students[i] = aStudent;
                hasSpace = true;
            } else hasSpace = false;
        } return hasSpace;          
    }


    public Student getStudent(int position){
            return students[position];

    }

}

这是我的主要方法:

import java.util.Scanner;

public class Program {



public static void main(String[] args) {


    int classSize;
    int numberStudentsInput;
    double gpa = 0;
    String studentName = null;
    Student student1 = new Student();

    Scanner sc = new Scanner(System.in);
    System.out.println("How big is this class?");
    classSize = sc.nextInt();

    Classroom classroom = new Classroom(classSize);

    do{
    System.out.println("How many students are enrolled in this class?");
    numberStudentsInput = sc.nextInt();

        if (numberStudentsInput>classSize)
            System.out.println("Too many students for the class size. Please try again. ");

    } while (numberStudentsInput >classSize);



    for (int i=0; i<=(numberStudentsInput-1);i++) {


        Scanner sc2 = new Scanner(System.in);
        System.out.println("What is the student's name: ");
        studentName = sc2.nextLine();
        student1.setName(studentName);

        System.out.println("What is the student's GPA");
        gpa = sc2.nextDouble();
        student1.setGPA(gpa);
        classroom.add(student1);    
    }

    System.out.println(student1.getName(classroom.getStudent(0)));
    System.out.println(student1.getName(classroom.getStudent(1)));


}

}

我输出数组单元格0和1的名称以查看结果但似乎只保留最新输入。因此,如果我输入“John”和“Paul”作为名称,我的输出将是两个单元格的“Paul”。

我认为我的添加方法是正确的,但我肯定是错的......我做错了什么?

感谢您的投入!

2 个答案:

答案 0 :(得分:1)

您正在向所有单元格添加相同的Student对象。因此,当您更改该对象时,您将在已经拥有它的旧单元格中以及在要添加它的新单元格中更改它。你说你“无法创建多个学生对象”。我不明白为什么不,但这是你问题的核心。

答案 1 :(得分:0)

您必须在for循环中创建一个新的Student对象

Student student1;

for(...) {
 student = new Student(); 
 ..
 classroom.add(student);
}