-1

问题:

我试图弄清楚如何访问Student Array该类以便为每个Student对象创建四个条目,但我不确定如何执行此操作,同时还允许程序创建多个Student.

public class ClassRoster<T> {

    public static void main(String[]args) {
        ClassRoster<Student> classroster = new ClassRoster<Student>();
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Add/Drop/Search?");
        String action = keyboard.nextLine();
        boolean done = false;
        Object temp, c, d, e;
        int fresh, soph, jun, sen;
        Student test = new Student();

        while(!done) {

            if(action.equalsIgnoreCase("Add")) 
                {
                    int counter = 0;
                    System.out.print("Enter Student ID");
                    temp = test.setID(keyboard.nextInt());
                    System.out.println("First name?");
                    c = test.setFirstName(keyboard.nextLine());
                    System.out.println("Last name?");
                    d = test.setLastName(keyboard.nextLine());
                    System.out.println("Academic Level?");
                    e = test.setLevel(keyboard.nextLine());
                    ...
}

我还有另一个名为 的类Student,其中有四个不同的数据条目(ID、FirstName、LastName、Academic Level)。

我不确定如何以正确的方式访问我创建的对象。它只是在这个类中给了我一个错误Driver,我不知道如何正确访问数组包。

4

1 回答 1

0

但我不确定如何做到这一点,同时还允许程序创建多个学生

目前,您只创建一个特定的学生实例。Student test = new Student();要实际创建多个学生,您必须迭代读取所有四个数据条目(ID、FirstName、LastName、Academic Level)的整个过程。我建议您让 Student 类使用类构造函数初始化它们,而不必使用特定的 set 方法初始化字段(您的四个数据条目)。这意味着 Student 类应如下所示:

public class Student{
    private final int ID;
    private final String firstname;
    private final String lastname;
    private String level;

public Student(int ID, String firstname, String lastname, String level){
    this.ID = ID;
    this.firstname = firstname;
    this.lastname = lastname;
    this.level = level;
}

ID、firstname 和 lastname 设置为 final,因为您预计它们不会更改。然而,学术水平应该改变,因此没有设置为最终。现在您已经为 Student 类设置了构造函数,我们可以了解如何允许程序一次插入多个学生。

public static void main(String[]args) {
    ClassRoster<Student> classroster = new ClassRoster<Student>();
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Add/Drop/Search?");
    String action = keyboard.nextLine();
    boolean done = false;

while(!done) {

    if(action.equalsIgnoreCase("Add")) {

            System.out.print("Enter Student ID");
            int ID = keyboard.nextInt();
            System.out.println("First name?");
            String firstname = keyboard.nextLine();
            System.out.println("Last name?");
            String lastname = keyboard.nextLine();
            System.out.println("Academic Level?");
            String level = keyboard.nextLine();
            Student student = new Student(ID, firstname, lastname, level);

            //we have now created a new instance of Student, now we have to save it in your classroster

            classroster.add(student);
    }
    System.out.println("Next action?");
    action = keyboard.nextLine();
    if(action.equals("done") done = true; //if you write 'done', your loop will finish executing
}

我不知道您对 classroster 的实现,但我假设您已经使用某种列表或映射来实现它,这就是为什么我在创建 Student 实例后调用 add(Student s) 方法的原因。要实际访问所有学生,您必须在 classroster 中实现一个方法,该方法返回已保存的 classroster 列表,然后在主循环中遍历返回的列表。要真正看到学生的样子,您还必须为学生实例实现方法,例如打印出他们的全名。


我看到您在使用数组、地图和列表时遇到了一些麻烦,因为您还不知道如何访问您的学生。我建议您阅读这三种数据结构类型之间的区别,并尝试在一个小示例中实现它们以了解它们是如何工作的。

于 2019-03-09T22:34:01.870 回答