Как разделить разные значения в 2-м массиве - PullRequest
0 голосов
/ 14 октября 2019

Массив содержит объекты из разных подклассов. Как я могу напечатать объекты в соответствии с их подклассами?

Я использовал сканер для чтения объектов студентов (выпускников и студентов) и помещал их в массив.

Мне нужно использовать методы наследования и toString для получения результатов.


Исходные данные в текстовом файле:

G Стив 23 Биология

U Julia 19 Музыкальная флейта, год: второкурсник

G Дэвид 25 Математика


Я мог читать и печатать объекты, но только в оригинальном порядке:

ВыпускникИмя: Стив, Возраст: 23 года, Майор: Биология

Бакалавриат Имя: Юлия, Возраст: 19, Майор: Музыка, год: Второкурсник

Выпускник Имя: Двад, Возраст: 25, Майор:Математика

Ниже приведен метод, который я использовал в файле тестера:


ArrayList<Student> studentList = new ArrayList<>();
Student s = new Undergraduate(type,name,age,major,year);
studentList.add(s);
Student s = new Graduate(type,name,age, major);
studentList.add(s);

for (Student d:studentList) {
System.out.println(d.toString());
}

=== Ожидаемый результат: ===

Количество студентов бакалавриата: 1

Имя: Джулия, Возраст: 19 лет, Майор: Музыка, год: второкурсник


Количество аспирантов: 2

Имя: Стив, Возраст: 23,Major: Biology

Имя: Dvid, Возраст: 25, Major: Math

===

Это мой первый вопрос здесь. Я не знаком с системой. Я пытался сделать мой вопрос легче для чтения. Извините, если это выглядит грязно.

Ответы [ 3 ]

1 голос
/ 14 октября 2019

Самый простой способ сделать это - создать два отдельных списка ArrayList: один для студентов и аспирантов:

ArrayList<Student> undGrdStudentList = new ArrayList<>();
ArrayList<Student> grdStudentList = new ArrayList<>();
if ("U".equals(type)){
  Student s = new Undergraduate(type,name,major);
  undGrdStudentList.add(s);
}else{
  Student s = new Graduate(type,name,major);
  grdStudentList .add(s);
}

System.out.println("Number of Undergraduate Students: " + undGrdStudentList.size());
for (Student d:undGrdStudentList) {
  System.out.println(d.toString());
}

System.out.println("Number of Graduate Students: " + grdStudentList .size());
for (Student d:grdStudentList ) {
  System.out.println(d.toString());
}

Что-то в этом роде

0 голосов
/ 14 октября 2019
Triple<String,Integer,String> student;
List<Triple<String,Integer,String>> UstudentList = new ArrayList<>();
student = new MutableTriple<>("jin",23,"biology");
UstudentList.add(student);
List<Triple<String,Integer,String>> GstudentList = new ArrayList<>();
student = new MutableTriple<>("amol",23,"music");
GstudentList.add(student);

Тройной класс от org.apache.commons.lang3.tuple.Triple

для ожидаемого результата

 System.out.println("No. of Undergraduate: "+UstudentList.size())
for (Triple<String,Integer,String> stud: UstudentList) {
            System.out.println(stud.getLeft()+stud.getMiddle()+stud.getRight());
        }
 System.out.println("No. of Graduate: "+GstudentList.size())
for (Triple<String,Integer,String> stud: GstudentList) {
            System.out.println(stud.getLeft()+stud.getMiddle()+stud.getRight());
        }
0 голосов
/ 14 октября 2019

Вы можете использовать instanceof для разделения различных типов объектов. пример.

if (s instanceof Undergraduate){
   Undergraduate u = (Undergraduate) s;
}

Вы можете перебирать свой список и считать свои объекты, используя instanceof. Вы также можете выполнить вышеуказанную проверку во время ввода.

...