2013-04-27 37 views
1

我試圖在創建患者時添加患者ID,ID每次都會增加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(); 
    } 




} 

也爲Im然後寫患者到的jList。在此先感謝

回答

2

既然你已經宣佈patientNumstatic,所有如果增加人甚至一個patientNum將遞增,因爲它是由對象共享的。

2

您已聲明patientNumstatic,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); 

(去除不相關的領域&方法簡潔)

+0

但如果它們不是靜態的,我該如何增加它們? – 2013-04-27 14:47:48

+1

@ SeanO'Riordan:您需要增加特定患者的數量。你瞭解靜態和非靜態變量/方法之間的區別嗎? – 2013-04-27 14:51:28

+0

沒有那麼多不,我是編程新手 – 2013-04-27 15:02:31

1

因爲您將Id設置爲patientNum的值,該值是單個對象的靜態值,並且將相同的引用傳遞到所有Patient對象。

您需要創建另一個私有int ID,並且在初始化該對象時需要設置其值。

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


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

} 

也刪除SETID方法

+0

從Patient類中刪除setId方法?以及SOR類? – 2013-04-27 14:51:02

+0

@ SeanO'Riordan很明顯。因爲Id只是一個增量值 – gurvinder372 2013-04-27 14:53:34

1

你已經在你的病人類聲明爲static整數patientNum,所以當你增加它,病人的所有實例將分享價值和patientNum變量將被視爲遞增。 。 。

0

patientNum被宣佈爲static這就是爲什麼它的行爲如此。

最簡單的方法是,類的成員是「類級」成員,因此該類的所有實例都共享它們。另一方面,非static成員是實例級成員。

相關問題