我正在尝试在创建患者时添加患者ID,每次ID都会增加1。但是当运行我的代码时,它也会增加所有其他ID的ID。
JButton btnCp = new JButton("Create Patient");
btnCp.addActionListener(new ActionListener() {//add action listener to btnCp (Create Patient Button)
public void actionPerformed(ActionEvent arg0) {
name = pateintNameTextField.getText();//reads entered text
address = patientAddressTextField.getText();
phone = patientPhoneTextField.getText();
pateintNameTextField.setText("");//sets fields back to empty ("")
patientAddressTextField.setText("");
patientPhoneTextField.setText("");
Patient.setID(Patient.patientNum +1);
Patient patient = new Patient(name,address,phone);//adds the Patient to the patient class
patientListModel.addElement(patient);//adds patient to patientLst
Patient.aPatientList.add(patient);
我的患者课程如下:
public class Patient implements Serializable{
public static int patientNum;
public String patientName;
public String patientAddress;
public String patientPhone;
public static ArrayList<Patient> aPatientList = new ArrayList<Patient>();
public Patient(String n, String a, String p){
patientName = n;
patientAddress = a;
patientPhone = p;
}
public static void setID(int id){
patientNum = id;
}
public static int getID(){
return patientNum;
}
public void setName(String n){
patientName = n;
}
public String getName(){
return patientName;
}
public void setAddress(String a){
patientAddress = a;
}
public String getAddress(){
return patientAddress;
}
public void SetPhoneNum(String p){
patientPhone = p;
}
public String getPhoneNum(){
return patientPhone;
}
public String toString() {
return "ID: " +getID() + " Name: "+ getName() +" Address: "+getAddress() +" Phone Number: "+getPhoneNum();
}
}
然后我将患者写入jList。提前致谢
答案 0 :(得分:2)
您已将patientNum
声明为static
,which means that all instances of Patient
share the same value。删除static
修饰符,以便每个实例都有自己的patientNum
。同样,您需要将getID()
和setID()
设为非静态。
此时,您需要引入专门用于获取下一个患者ID的静态计数器。
public class Patient {
private static int patientIdCounter = 0;
private int patientNum;
// snip
public Patient(String n, String a, String p){
patientId = patientIdCounter++;
patientName = n;
patientAddress = a;
patientPhone = p;
}
public int getID() {
return patientNum;
}
}
然后:
Patient patient = new Patient(name,address,phone);
(删除不相关的字段和简洁方法)
答案 1 :(得分:2)
由于您已将patientNum
声明为static
,因此只要其中一个增加,所有patientNum
都会递增,因为它由对象共享。
答案 2 :(得分:1)
因为您使用patientNum的值设置了Id,这是单个对象的静态值,并且相同的引用被传递给所有患者对象。
您需要创建另一个私有int Id,并且在初始化对象时需要设置其值。
public Patient(String n, String a, String p){
patientName = n;
patientAddress = a;
patientPhone = p;
id = patientNum ++;
}
还删除了setId方法
答案 3 :(得分:1)
您已将Patient Class中的Integer patientNum
声明为静态,因此当您递增它时,患者的所有实例将共享该值,并且他们的patientNum变量将被视为递增。 。
答案 4 :(得分:0)
patientNum
被声明为static
,这就是它以这种方式表现的原因。
最简单的方法是,类的static
成员是“类级别”成员,因此该类的所有实例都共享它们。另一方面,非static
成员是实例级成员。