循环对象专用数组



我确信我的循环代码是错误的,但就我的一生而言,我看不清它是什么。

我必须创建一个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"one_answers"Paul"作为名称,那么这两个单元格的输出都将是"Paul"。

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

感谢您的投入!

您正在向所有单元格添加相同的Student对象。因此,当你更改该对象时,你既要在已有对象的旧单元格中更改,也要在添加对象的新单元格中更改。你说你"不能创建多个Student对象"。我不明白为什么不能,但这是你问题的核心。

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

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

最新更新