Пытаясь создать один массив объектов, как длина массива, так и объекты в массиве определяются пользователем. - PullRequest
0 голосов
/ 22 апреля 2020
Scanner nos = new Scanner(System.in);

Выше у меня есть al oop, который проходит по длине числа студентов, которое определяется вводом пользователя. Оттуда они должны заполнить четыре различных атрибута: Имя, Фамилия, возраст и идентификатор, при этом эти четыре атрибута составляют один объект. System.out.println («Введите число студентов»);

int z = Integer.parseInt(nos.nextLine());

if (nos.equals("end") | nos.equals("End") | nos.equals("END")) {
  System.exit(0);
}
System.out.println("Number of Students is " + z);

Student[] Students = new Student[z];

Длина массива предопределена, и оттуда, исходя из количества объектов и всех имеющихся атрибутов, должен быть напечатан массив для отображения все объекты в форме четырех атрибутов.

for (int i = 0; i < z; i++) {

Students[i] = new Student();

for (int g=0; g<z; g++) {

Students[i] = new Student[] {firstname + "," + lastname + "," + age + "," + id};

System.out.println(Students[i]);

У меня проблемы с типами данных, являющимися как строковыми, так и целыми, и я не могу найти хороший способ создать массив обоих типов данных. Кроме того, если пользователь в любой момент наберет end, код перестанет работать. }

1 Ответ

0 голосов
/ 22 апреля 2020

Когда дело доходит до Java, невозможно хранить разные типы данных внутри массивов, как в Python. Однако вы можете создать переменные экземпляра для каждой характеристики c, а затем создать конструктор, в котором вы будете хранить входные данные пользователя для каждого объекта учащегося. Например:

//instance variables
String firstName;
String lastName;
int age;
int id;

//constructor for Student class    
public Student(String firstName, String lastName, int age, int id) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
    this.id = id;
}

Я вижу, что у вас было для l oop для хранения нового объекта ученика в каждом индексе вашего массива, а затем еще для l oop для хранения переменных для каждого объекта студента , Вы можете сделать все это, используя один для l oop. Внутри вашего l oop вы будете использовать объект сканера для извлечения пользовательского ввода для firstname, lastname, age и id каждого учащегося. Отсюда вы должны назначить эти переменные для каждого нового создаваемого объекта ученика и сохранить этот объект в массиве учеников. Я добавил несколько операторов печати, чтобы дать пользователю немного больше контекста для своих входов. Затем вы можете использовать System.out.printf() вместо System.out.println для форматирования вывода. Что касается остановки вашей программы, когда пользователь вводит «конец», так как вы делали вашу z переменную, анализирующую как целое число, она ожидает целое число. Вы можете просто исправить это, передавая пользовательский ввод в виде строки и затем анализируя переменную как новую переменную int после вашего оператора if.

Вот код для этого:

Scanner nos = new Scanner(System.in);

String z = nos.next();

if (z.equals("end") || z.equals("End") || z.equals("END")) {
    System.exit(0);
}

System.out.println("Enter number of students: ");

int studentNumber = Integer.parseInt(z);
System.out.println("Number of Students is " + studentNumber + "\n");

Student[] students = new Student[studentNumber];


for (int i = 0;  i < students.length; i++) {
    System.out.println("Enter student " + (i+1) + "\'s first name:");
    String firstname = nos.next();

    System.out.println("Enter student " + (i+1) + "\'s last name:");
    String lastname = nos.next();

    System.out.println("Enter student " + (i+1) + "\'s age:");
    int age = nos.nextInt();

    System.out.println("Enter student " + (i+1) + "\'s id:");
    int id = nos.nextInt();

    students[i] = new Student(firstname, lastname, age, id);

    System.out.printf("Student %d: %s, %s, %d, %d\n", i + 1, students[i].firstName, students[i].lastName, students[i].age, students[i].id);
}

Если вы хотите затем отобразить всю информацию внутри вашего массива, вы можете следовать предыдущему коду с этим:

System.out.println("\nAll students in array:" );
for(int i = 0; i < students.length; i++) {
    System.out.printf("Student %d: %s, %s, %d, %d\n", i + 1, students[i].firstName, students[i].lastName, students[i].age, students[i].id);
}
...