У меня есть домашнее задание по системе управления больницей. Я в основном закончил, но у меня есть проблема с полиморфизмом. В моем проекте у меня есть 6 классов и 1 тестовый класс. Эти 6 классов: «Доктор», «Амбулаторный пациент», «Стационар», «Пациент» и «Человек». Класс Doctor и Patient расширяют класс Person, а класс In/Ampatient расширяет класс Patient. Мой учитель говорит, что у врача теперь есть только 1 список пациентов, в который можно добавить как стационарных, так и амбулаторных пациентов (полиморфизм). Этот список определяется в частном порядке. Таким образом, новые добавленные методы addPatient/removePatient будут использоваться для добавления/удаления пациентов в/из этого списка.
Как я могу это сделать? В каком классе я должен написать список массивов в / амбулаторно. Вот мой код
Доктор.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.
...
@NicholasK хорошо, я это исправлю.
Можете ли вы переформатировать свой вопрос? Что тебе необходимо сделать?
@GolovPavel Я не могу понять, чего хочет учитель? У меня должен быть только один массив в классе врачей, но где должен быть врач в/амбулаторно?
Кроме того, в чем именно проблема? Ваши addPatient() и removePatient() выглядят отлично. Кроме того, вам нужен только один список patients (из-за полиморфизма).




Я думаю, что ваш учитель имел в виду, что вам вообще не нужны inpatients и outpatients списки. Когда вы создали список массивов patients, вы можете содержать там обоих пациентов, потому что они расширяют класс Patient.
поэтому, как сказал Павел, вам не нужны списки для InPatients и OutPatients, просто есть один для пациентов, а полиморфизм позаботится об обоих типах. В вашем коде вы все равно не используете списки, поэтому просто удалите объявление.
Кроме того, еще пара замечаний. Когда вы инициализируете дженерик, если ваш тип объявления и тип инициализации совпадают, вам не нужно упоминать тип во второй раз. Например, здесь:
List<String> names = new ArrayList<String>();
В этом случае второе упоминание «String» избыточно и может быть опущено.
Кроме того, не уверен, где вы находитесь со своим образованием в области Java, но по мере роста вашего списка вам потребуется все больше и больше времени, чтобы проверить, добавлен ли уже пациент. Таким образом, использование списка может быть не лучшей идеей. Я бы использовал карту, чтобы вы могли быстрее посмотреть, находится ли там пациент. То же самое касается удаления. Вам также больше не понадобятся петли. Надеюсь, это поможет!