Я не знаю, как задать этот вопрос. Мне нужно написать программу, которая имеет 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
Я знаю, что мои коды плохие. Но мне необходимо иметь геттеры и сеттеры для каждой переменной в этом бизнес-классе.
Спасибо, Дэйв! Я проверю это. Я всегда трачу много времени на поиск, поиск своего ответа, прежде чем что-то опубликовать. Но иногда я не мог придумать правильные термины, чтобы найти правильные ответы на то, что я ищу.




Переместите ваше создание объекта Business в цикл for:
for (int counter = 0; counter < businessArray.length; counter++) {
Business b = new Business();
// ...
}
Прямо сейчас каждая запись в массиве указывает на один и тот же объект, поэтому вы многократно перезаписываете в нем значения. Перемещение создания в цикл означает, что у вас будет отдельный объект для каждого слота массива.
Спасибо, Майк, что помог мне. Я переместил его в петлю, чтобы он заработал. Один простой ход, который я бы никогда не понял, если бы не твои подсказки. Но теперь массив отображается некорректно. Он отображает значения ASCII.
Привет Майк! Не могли бы вы помочь мне, как отобразить этот массив объектов? Перед перемещением экземпляра внутри цикла for он отображался нормально. Теперь, когда я сделал то, что вы показали, я могу сделать так, чтобы это отображалось больше. Я пробовал много разных способов Arrays.toString () ... просто распечатывает шестнадцатеричные значения массива независимо от того, печатаю ли я внутри цикла или снаружи. Пожалуйста помоги. Спасибо!
Перемещение не должно на это повлиять. Если вы переключите линию обратно и ничего не измените, начнется ли печать снова успешно? Это, вероятно, требует нового вопроса.
Мне пришлось вызвать методы для правильной печати содержимого массива: businessArray [x] .getName () + businessArray [x] .getCourses () Еще раз спасибо! Решая одну, я сталкиваюсь с разными проблемами. Это часть обучения. Но спасибо вам и сообществу за помощь на этом пути.
String retainCourse(int pointer){
return this.courses[pointer];
}
Добавьте эту функцию в свой бизнес-класс.
Вы должны перезаписать метод .toString() класса, чтобы получить ожидаемый результат.
В цикле for лучше получить текущий объект и установить его как временную переменную, приведенную к точному классу! Business current = (Business) businesses[i];
Спасибо, Абель, что нашел время помочь мне. Мне нужно больше узнать о том, что вы здесь показываете. Мой уровень еще не совсем там. Вы можете разыграть объект! Вот это да. Но мне нужно выяснить, как создать этот .toString (), чтобы правильно распечатать мой массив. Я использовал java.until.Arrays.toString (businessArray [counter]), но он дает мне ошибку компиляции в .toString.
Здравствуйте, DCN, добро пожаловать в Stack Overflow. Сообщество не ведет себя «по-настоящему злым», скорее, оно пытается сохранить качество SO. Вы заметили, что не знаете правил, поэтому, пожалуйста, возьмите тур, чтобы ознакомиться с тем, как работает SO. В частности, просмотрите как задать вопрос и как оставаться по теме. Если вы будете следовать инструкциям, ваш вопрос не будет отклонен или закрыт.