如何在Java中访问数组并将数据分配给每个对象?

时间:2019-03-09 21:32:03

标签: java arrays databags

问题:

我试图弄清楚如何访问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,名字,姓氏,学术水平)。

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

1 个答案:

答案 0 :(得分: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,名字和姓氏将设置为最终名称,因为您预计它们不会更改。但是,学术水平应该改变,因此不能设置为最终水平。现在,您已经为学生类设置了一个构造函数,我们可以了解如何允许该程序一次插入多个学生。

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列表,然后在主循环中遍历返回的列表。要真正看到学生的样子,您还必须实现学生实例的方法,例如打印出他们的全名。


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