Как сохранить объект в массиве объектов в Java - PullRequest
0 голосов
/ 25 октября 2018

Я не уверен, как задать этот вопрос.Я должен написать программу, которая имеет 2 класса: один хранить данные и один вызов для отображения данных.Данные - имя студента и названия его / ее 4 курсов.Но я должен поместить это в цикл, чтобы пользователь мог ввести как минимум 3 записи.Если пользователь не вводит имя учащегося (или имя = пусто), выйдите из цикла и отобразите введенную информацию.

Пример:

John Doe MATH 101 ENGL 101 READ 101 COMP 101
Jane Doe PHYS 101 CHEM 101 PSYC 101 ACCT 101
Mary Doe PHED 101 HIST 101 CALC 101 POLS 101

Что я пытаюсь сделатьсделать - сделать каждую запись ученика объектом и сохранить эти 3 объекта в массиве объектов, а затем отобразить его.

Ниже приведен мой код:

import java.util.Scanner;
public class UserInterface {
    public static void main(String[] args) {
    //Create a scanner
    Scanner input = new Scanner(System.in);

    //Create an object from Business class
    Business b = new Business();

    //Declare variables
    final int NUMBER_OF_COURSES = 4;
    String[] coursesName = new String[4];
    Business[] businessArray = new Business[3]; //Declare a array of objects

    for (int counter = 0; counter < businessArray.length; counter++) {

    //Prompt user to input name
    System.out.println("Enter student's name: ");
    b.setName(input.nextLine());

    for (int i = 0; i < NUMBER_OF_COURSES; i++) {
    System.out.println("Enter " + b.getName() + "'s course number " + (i + 1));
    coursesName[i] = input.nextLine();
    }//end of for(i)-loop

    b.setCourses(coursesName);

    businessArray[counter] = b;

    System.out.println(businessArray[counter]); //Here it display correctly for each round

    }//End of for(counter)-loop

    for (int pa = 0; pa < businessArray.length; pa++)
        System.out.println(businessArray[pa]);         //but here it displays 3 records of the last entry
                                                        //so my question is how do I retain each entry in its own object and 
                                                     //adds it to the array of objects? 
                                                     //I know that b gets overwrite by the last data entered because
                                                    //it is just a pointer to that object.  

    input.close();

    }//End of main method

}//End of class UserInterface


The other class:

public class Business {

    //Declare variables
    private String name;
    private String[] courses = new String[4];

    //Default Constructor
    public Business(){

    }

    //getter for student's name
    public String getName() {
        return name;
    }

    //setter for student's name
    public void setName(String name) {
        this.name = name;
    }

    //getter for courses' name
    public String[] getCourses() {
        return courses;
    }

    //setter for courses' name
    public void setCourses(String[] courses) {
        this.courses = courses;
    }

}//End of class Business

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

Ответы [ 2 ]

0 голосов
/ 25 октября 2018
String retainCourse(int pointer){
    return this.courses[pointer];
}

Добавьте эту функцию в свой бизнес-класс.

Чтобы получить ожидаемый результат, необходимо переписать метод .toString() класса.

В цикле for этоЛучше практиковаться, чтобы получить текущий объект и установить его как временную переменную, приведенную к точному классу!Business current = (Business) businesses[i];

0 голосов
/ 25 октября 2018

Переместите ваше создание объекта Business в цикл for:

for (int counter = 0; counter < businessArray.length; counter++) {
    Business b = new Business();
    // ...
}

Прямо сейчас каждая запись в массиве указывает на один и тот же объект, поэтому вы перезаписываете значения вэто неоднократно.Перемещение создания в цикл означает, что у вас будет отдельный объект для каждого слота массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...