我是计算机科学专业一年级学生,正在为一项作业创建医院管理系统。我为用户填充的患者创建了一个数组列表。我还为医生创建了一个预定义的数组列表。问题是 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中,最佳实践是将每个类单独放在自己的文件中。您当前正在
Doctor
中定义 Patient
和 AandEDepartment
,它们都应该位于不同的文件中。当您在 main
类中调用时,您的 IDE 应自动导入这些类。
此外,您不应该在方法中声明类。如果您绝对想在 Doctor
中声明
Patient
和
AandEDepartment
,请参阅https://www.w3schools.com/java/java_inner_classes.asp
希望这有帮助
正如其他人评论的那样:
您的
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,医生=[医生[姓名=詹姆斯,专业=心血管],医生[姓名=彼得,专业=骨科],医生[姓名=理查德,专业=皮肤科]]]