С вашим кодом довольно много проблем.
Ваша структура классов противоречит тому, что вы пытаетесь сделать.Исходя из результатов примера, кажется, что вы хотите, чтобы rollNo увеличивался каждый раз, когда учащегося делают.Также кажется излишним создавать отдельные классы, когда единственное, что отличается между ними, - это префикс (например, младший, старший, средний и т. Д.).Вместо того, чтобы создавать несколько классов, почему бы не добавить переменную экземпляра в ваш класс ученика.(Также импортируйте Scanner, чтобы мы могли использовать его позже для пользовательского ввода, и ArrayList для хранения данных об ученике). Например:
import java.util.Scanner;
import java.util.ArrayList;
public class Student {
String name;
String studentType;
int age;
int rollno;
static int schoolRollno = 1000;
Далее вы должны сделать правильный конструктор для вашего ученикакласс, состоящий из имени String и типа int, и присвоение их переменным экземпляра, которые мы объявили ранее.Мы назначим переменную studentType в зависимости от их возраста и получим студентов по роллно из статической переменной.Мы должны увеличить статическую переменную, чтобы у следующего ученика был другой номер броска.(Вы можете изменить сравнение по возрасту на любое нужное вам число, но эти цифры - то, что я собрал из вашего кода)
public Student(String name, int age) {
this.name = name;
if(age <= 30) {
this.studentType = "Junior";
}
else if(age <= 40) {
this.studentType = "Intermediate";
}
else {
this.studentType = "Senior";
}
this.age = age;
this.rollno = schoolRollno;
schoolRollno++;
}
Последнее, что нам нужно сделать перед началом работыНашей основной функцией является написание метода toString () для нашего студенческого класса.Основываясь на выводе, вы можете захотеть такой метод:
@Override
public String toString() {
return studentType + " name: " + name + " age: " + age + ", roll: " + rollno;
}
Теперь мы можем взглянуть на функцию public static void main(String args[])
.У нас есть несколько вещей, которые нам нужно сделать здесь.Поскольку, похоже, мы не знаем, сколько студентов мы собираемся добавить, мы должны использовать ArrayList.Мы также должны создать наш сканер здесь:
ArrayList<Student> students = new ArrayList<Student>();
Scanner scan = new Scanner(System.in);
Теперь мы должны создать цикл while, который позволит пользователю продолжать вводить студентов и желать остановиться.Лично я фанат цикла do / while, поэтому сделаю это так.Нам нужно объявить нашу переменную вне цикла, чтобы мы могли использовать ее в качестве условия для цикла.
boolean done = false;
do {
//(inner loop code here)
} while(!done);
//end loop code
Теперь для кода внутреннего цикла.Нам нужно получить String (имя) от пользователя и int (age).Как только мы получим входные данные, мы хотим создать объект Student и добавить его в наш ArrayList.Затем, после всего этого, мы хотим увидеть, хочет ли пользователь вводить другого студента (изменяя значение нашего логического значения, которое мы использовали при объявлении первого цикла do / while в соответствии с вводом пользователя).Мы можем сделать все это с помощью сканера следующим образом:
System.out.println("Enter name:");
String name = scan.nextLine();
System.out.println("Enter age:");
int age = scan.nextInt();
//we use scan.nextLine() here because scan.nextInt() does not read to the end of the line
scan.nextLine();
Student s = new Student(name, age);
students.add(s);
boolean validInput = true;
do {
validInput = true;
System.out.println("Continue? (y/n)");
String input = scan.nextLine();
if(input.equalsIgnoreCase("y")) {
done = false;
}
else if(input.equalsIgnoreCase("n")) {
done = true;
}
else {
validInput = false;
}
} while(!validInput);
Наконец, мы хотим напечатать студентов, как только мы закончим.Мы можем легко распечатать всех студентов в нашем ArrayList, используя цикл for-each.(Это относится к концу нашего main(String args[])
метода)
for(Student s: students) {
System.out.println(s.toString());
}