2013-04-27 35 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成员是实例级成员。

相关问题