ArrayList полиморфизм в Java - PullRequest
0 голосов
/ 19 мая 2019

У меня есть домашняя работа о системе управления больницей.Я в основном закончил, но у меня есть проблема с полиморфизмом.В моем проекте у меня есть 6 классов и 1 тестовый класс.Эти 6 классов: доктор, амбулаторный пациент, стационар, пациент и человек.Класс «Доктор» и «Пациент» расширяют класс «Персона», а класс «В / амбулаторно» расширяет класс «Пациент».Мой учитель говорит, что у доктора теперь есть только один список для пациентов, в который можно добавить как стационарных, так и амбулаторных пациентов (полиморфизм).Этот список определяется в частном порядке.Итак, недавно добавленные методы addPatient / removePatient будут использоваться для добавления / удаления пациентов в / из этого списка.

Как я могу это сделать?Какой класс я должен написать в / амбулаторный список массивов.Вот мой код

Doctor.java

public class Doctor extends Person{

    private int staffId;
    private double salary;

    public ArrayList<Patient> patients = new ArrayList<Patient>();

    public ArrayList<Inpatient> inpatients = new ArrayList<Inpatient>();
    public ArrayList<Outpatient> outpatients = new ArrayList<Outpatient>();
    ...
public void addPatient(Patient a) {
        JFrame j=new JFrame();

        for (int i = 0; i < patients.size(); i++) {
            if ( (patients.get(i)).getRegistrationId() == a.getRegistrationId()) {
                JOptionPane.showMessageDialog(j,"Patient already added before!");
                return;
            }
        }

        patients.add(a);
    }

    public void removePatient(int registrationId) {
        for (int i = 0; i < patients.size(); i++) {
            if (patients.get(i).getRegistrationId() == registrationId) {
                patients.remove(i);
            }
        }
    }

test.java

public static void main(String args[]){
   ... 
 Doctor d = new Doctor(111222, "ali", 50, "m", "ankara", 6000); //staffId, name, age, sex, address, salary
 h.addDoctor(d);
 Inpatient in = new Inpatient(333444, "veli", 32, "m", "istanbul", 345.40, 410);
 d.addPatient(in); //Inpatient in is registered to Doctor d.
 Outpatient out = new Outpatient(555666, "helin", 28, "f", "izmir", 610.35);
 d.addPatient(out); //Outpatient out is registered to Doctor d.

...

Ответы [ 2 ]

3 голосов
/ 19 мая 2019

Я думаю, что ваш учитель имел в виду, что вам вообще не нужны списки inpatients и outpatients.Когда вы создали список массивов patients, вы можете содержать там обоих пациентов, поскольку они расширяют класс Patient.

1 голос
/ 19 мая 2019

так что, как сказал Павел, вам не нужны списки для InPatients и OutPatients, просто есть списки для пациентов, и полиморфизм позаботится о обоих типах. В вашем коде вы все равно не используете списки, поэтому просто удалите объявление.

Кроме того, еще пара замечаний. Когда вы инициализируете универсальный тип, если ваш тип объявления и тип инициализации совпадают, вам не нужно упоминать тип во второй раз. Например, здесь:

List<String> names = new ArrayList<String>();

В этом случае второе упоминание о «строке» является избыточным и может быть опущено.

Кроме того, не уверен, где вы находитесь с вашим образованием Java, но по мере того, как ваш список растет, если потребуется все больше и больше времени, чтобы проверить, был ли уже добавлен пациент. Таким образом, использование списка может быть не самой лучшей идеей. Я бы использовал карту, чтобы вы могли быстрее увидеть, находится ли пациент там. То же самое касается удаления. Вам также больше не понадобятся петли. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...