Как сохранить объект в массиве объектов в Java

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

Пример:

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

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

Здравствуйте, DCN, добро пожаловать в Stack Overflow. Сообщество не ведет себя «по-настоящему злым», скорее, оно пытается сохранить качество SO. Вы заметили, что не знаете правил, поэтому, пожалуйста, возьмите тур, чтобы ознакомиться с тем, как работает SO. В частности, просмотрите как задать вопрос и как оставаться по теме. Если вы будете следовать инструкциям, ваш вопрос не будет отклонен или закрыт.

dave 25.10.2018 06:51

Спасибо, Дэйв! Я проверю это. Я всегда трачу много времени на поиск, поиск своего ответа, прежде чем что-то опубликовать. Но иногда я не мог придумать правильные термины, чтобы найти правильные ответы на то, что я ищу.

DCN 26.10.2018 00:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
213
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

Спасибо, Майк, что помог мне. Я переместил его в петлю, чтобы он заработал. Один простой ход, который я бы никогда не понял, если бы не твои подсказки. Но теперь массив отображается некорректно. Он отображает значения ASCII.

DCN 26.10.2018 00:49

Привет Майк! Не могли бы вы помочь мне, как отобразить этот массив объектов? Перед перемещением экземпляра внутри цикла for он отображался нормально. Теперь, когда я сделал то, что вы показали, я могу сделать так, чтобы это отображалось больше. Я пробовал много разных способов Arrays.toString () ... просто распечатывает шестнадцатеричные значения массива независимо от того, печатаю ли я внутри цикла или снаружи. Пожалуйста помоги. Спасибо!

DCN 26.10.2018 14:46

Перемещение не должно на это повлиять. Если вы переключите линию обратно и ничего не измените, начнется ли печать снова успешно? Это, вероятно, требует нового вопроса.

Mike Precup 26.10.2018 23:36

Мне пришлось вызвать методы для правильной печати содержимого массива: businessArray [x] .getName () + businessArray [x] .getCourses () Еще раз спасибо! Решая одну, я сталкиваюсь с разными проблемами. Это часть обучения. Но спасибо вам и сообществу за помощь на этом пути.

DCN 27.10.2018 03:15
String retainCourse(int pointer){
    return this.courses[pointer];
}

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

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

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

Спасибо, Абель, что нашел время помочь мне. Мне нужно больше узнать о том, что вы здесь показываете. Мой уровень еще не совсем там. Вы можете разыграть объект! Вот это да. Но мне нужно выяснить, как создать этот .toString (), чтобы правильно распечатать мой массив. Я использовал java.until.Arrays.toString (businessArray [counter]), но он дает мне ошибку компиляции в .toString.

DCN 26.10.2018 00:42

Другие вопросы по теме