当我尝试添加一个id时,我的所有ID都会递增

时间:2013-04-27 14:41:34

标签: java arraylist jlist

我正在尝试在创建患者时添加患者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。提前致谢

5 个答案:

答案 0 :(得分:2)

您已将patientNum声明为staticwhich 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成员是实例级成员。