1

我正在尝试在创建患者时添加患者 ID,该 ID 每次都会增加一。但是当运行我的代码时,它也会增加所有其他 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。提前致谢

4

5 回答 5

2

您已声明patientNumstatic这意味着 的所有实例Patient共享相同的值。删除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);

(为简洁起见,删除了不相关的字段和方法)

于 2013-04-27T14:42:59.577 回答
2

由于您已声明patientNumas ,如果您增加其中一个static,所有的都会增加,因为它是由对象共享的。patientNum

于 2013-04-27T14:44:16.067 回答
1

因为您的 Id 设置为 patientNum 的值,它是单个对象的静态值,并且相同的引用被传递给所有 Patient 对象。

您需要创建另一个私有 int Id,并且需要在初始化对象时设置其值。

public Patient(String n, String a, String p){


    patientName = n;
    patientAddress = a;
    patientPhone = p;
    id = patientNum ++;

}

也删除 setId 方法

于 2013-04-27T14:46:02.373 回答
1

您已在 Patient 类中将 Integer 声明patientNum为静态,因此当您递增它时,所有患者实例都将共享该值,并且它们的 patientNum 变量将被视为已递增。. .

于 2013-04-27T14:48:32.873 回答
0

patientNum被声明为static这就是它以这种方式表现的原因。

看待这一点的最简单方法是static类的成员是“类级”成员,因此类的所有实例共享它们。static另一方面,非成员是实例级成员。

于 2013-04-27T15:02:58.283 回答