1

患者の作成時に患者 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に書き込んでいます。前もって感謝します

4

5 に答える 5

2

であると宣言patientNumしましたstaticこれは、 のすべてのインスタンスがPatient同じ値を共有することを意味します。static各インスタンスが独自の を取得するように修飾子を削除しますpatientNumgetID()同様に、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

patientNumとして宣言したので、オブジェクトが共有しているため、それらの 1 つでもインクリメントするとstatic、すべてがインクリメントされます。patientNum

于 2013-04-27T14:44:16.067 に答える
1

ID には、単一オブジェクトの静的な値であるpatientNum の値が設定されており、同じ参照がすべての患者オブジェクトに渡されるためです。

別のプライベート 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 に答える