如何使用定义的类填充 ArrayList?

问题描述 投票:0回答:2

我是计算机科学专业一年级学生,正在为一项作业创建医院管理系统。我为用户填充的患者创建了一个数组列表。我还为医生创建了一个预定义的数组列表。问题是 ArrayList 无法识别紧接在其下面定义的 Doctor 类。这也会导致代码进一步出现问题,我试图调用数组来链接 HashMap 中的医生和患者。

代码如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.*;

public class AandEDepartment {

public static void main(String[] args) {

    ArrayList<Doctor> doctors = new ArrayList<>();
            doctors.add(new Doctor("James", "Cardiovascular"));
            doctors.add(new Doctor("Richard", "Dermatology"));
            doctors.add(new Doctor("Peter", "Orthopedics"));

        class Doctor {
            String name;
            String specialisation;
            
            public Doctor(String name, String specialisation){
                this.name = name;
                this.specialisation = specialisation;
            }
            //create getters for each of these variables
            public String getName() {
                return name;
            }
            public String getSpecialisation() {
                return specialisation;
            }
            
        class Patient {
            int patientID;
            String patientFirstName;
            String patientLastName;
            int patientAge;
            String condition;
            double cost;
            
            public Patient (int patientID, String patientFirstName, String patientLastName, int patientAge, String condition, double cost)

这与多个班级(医生/患者)有关吗?我尝试将“医生”和“病人”重新定义为公共,但这会产生不同的错误(非法修饰符)。有什么想法吗?

谢谢。

java arraylist do-while
2个回答
1
投票

在java中,最佳实践是将每个类单独放在自己的文件中。您当前正在

Doctor
中定义
Patient
AandEDepartment
,它们都应该位于不同的文件中。当您在
main
类中调用时,您的 IDE 应自动导入这些类。

此外,您不应该在方法中声明类。如果您绝对想在 Doctor

 中声明 
Patient
AandEDepartment
,请参阅 
https://www.w3schools.com/java/java_inner_classes.asp

希望这有帮助


0
投票

正如其他人评论的那样:

您的

Doctor
Patient
类是业务逻辑的核心部分。它们可能会用在您应用程序的各个部分。因此它们应该存储在自己的
.java
文件中,而不是嵌套在另一个类中。

此外,如果您的类的主要目的是透明且不可变地通信数据,请将您的类定义为“记录”。在记录中,编译器隐式创建构造函数、getter、equals &

hashCode
toString
在单独的 

Doctor.java

文件中:

package work.basil.example.hospital;

public record Doctor(String name , String specialization ) { }

在单独的 
Patient.java

文件中:

package work.basil.example.hospital;

public record Patient(
        int patientID ,
        String patientFirstName ,
        String patientLastName ,
        int patientAge ,
        String condition ,
        double cost
) { }

顺便说一句,您的 
Patient

课程看起来像是您将两个不同的实体混为一谈,即患者(人)与他们的治疗。但我会在这里忽略这个问题。

为部门定义一个类。再次强调,当且仅当类的主要目的是透明且不可变地传递数据时才使用记录。否则重写为常规类。

在单独的

Department.java

文件中:

package work.basil.example.hospital;

import java.util.Set;

public record Department( String name , Set < Doctor > doctors ) { }

编写一个应用程序类来填充一些数据。

在单独的

App.java

文件中:

package work.basil.example.hospital;

import java.util.Set;

public class App
{
    public static void main ( String[] args )
    {
        String deptName = "A&E";
        Set < Doctor > doctorSet =
                Set.of(
                        new Doctor( "James" , "Cardiovascular" ) ,
                        new Doctor( "Richard" , "Dermatology" ) ,
                        new Doctor( "Peter" , "Orthopedics" )
                );
        Department aAndE = new Department( deptName , doctorSet );

        System.out.println( "aAndE = " + aAndE );
    }
}

运行时:

aAndE = 科室[姓名=A&E,医生=[医生[姓名=詹姆斯,专业=心血管],医生[姓名=彼得,专业=骨科],医生[姓名=理查德,专业=皮肤科]]]

© www.soinside.com 2019 - 2024. All rights reserved.