Как получить доступ к массиву и назначить данные каждому объекту в Java? - PullRequest
0 голосов
/ 10 марта 2019

Проблема:

Я пытаюсь выяснить, как получить доступ к классу 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 голосов
/ 10 марта 2019

но я не уверен, как это сделать, и в то же время разрешить программе создавать более одного студента

В настоящее время вы создаете только один конкретный экземпляр студента с Student test = new Student(); Чтобы создать более одного студента, вам нужно будет повторить весь процесс чтения всех четырех записей данных (ID, FirstName, LastName, Academic Level). Вместо того, чтобы инициализировать поля (ваши четыре записи данных) определенными методами набора, я бы рекомендовал вам позволить классу 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;
}

Идентификатор, имя и фамилия установлены на окончательные, поскольку вы предвидите, что они не изменятся. Однако академический уровень должен измениться и, следовательно, не является окончательным. Теперь, когда вы настроили конструктор для своего класса «Студент», мы можем перейти к тому, как разрешить программе вставлять сразу несколько студентов.

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, но я предполагаю, что вы реализовали ее с помощью какого-то списка или карты, поэтому я вызываю метод add (Student) после создания экземпляра Student. Чтобы затем получить доступ ко всем учащимся, вам необходимо реализовать метод в classroster, который возвращает сохраненный список classroster, а затем перебирает возвращенный список в основном цикле. Чтобы на самом деле увидеть, как выглядят учащиеся, вам также нужно будет реализовать методы для экземпляров учащихся, например, распечатать их полные имена.


Я вижу, что у вас небольшие проблемы с массивами, картами и списками, так как вы еще не знаете, как получить доступ к своим студентам. Я рекомендую вам прочитать разницу между этими тремя типами структур данных и просто попытаться реализовать их в небольшом примере, чтобы увидеть, как они работают.

...