2013-05-04 96 views
0

我有一個數組列表,它將記錄存儲爲對象。 以不同的形式,我允許用戶輸入一個id並用相應的id檢索該記錄的數據。第二條記錄不會存儲在數組列表中

我的問題是,我只能檢索一個記錄,這意味着只有我存儲在數組列表中的第一條記錄。

如果我在第二記錄類型,如果嘗試使用ID搜索記錄,我得到的消息「無效的ID」,它是我分配,以確保用戶不會輸入無效ID的消息。

這裏是我用的對象存儲到ArrayList代碼: -

patient_class patients=new patient_class(firstname,lastname,initials,gender,birthday,birthmonth,birthyear,contactnumber,address,bloodgroup,patientid); 

      patientlist.add(patients); 

這裏是我的代碼,以檢查是否如果ArrayList包含的ID。

public boolean checkrecord(ArrayList<patient_class>patients,String search) 
    { 

     for(patient_class patient : patients) 
     { 
     if(patient.getid().contains(search)) 
     { 
      return true; 
     } 

    }  
    return false; 
    } 

如果它是真的,我創建了一個單獨的構造函數來查找給定id的記錄。

下面是該代碼: -

public patient_class searchrecord(ArrayList<patient_class> patients, String search) 
{ 


     for(patient_class patient: patients) //used enhanced for loop 


      if(patient.getid().equals(search)) 
      { 

       return patient; 

      } 
     else 
      { 
      return null; 
      } 
     return null; 
     } 

爲什麼我只能在到ArrayList進入一個記錄,但不是2的記錄?當我輸入第二個記錄並單擊註冊時,我的程序顯示「succussfuly registered」,但我無法搜索該記錄,但我可以使用我製作的另一種方法刪除該記錄。

什麼問題?

回答

2

這就是問題所在:

for(patient_class patient: patients) //used enhanced for loop 
    if(patient.getid().equals(search)) 
    { 
     return patient; 
    } 
    else 
    { 
     return null; 
    } 
return null; 

由於您else塊,你回來null如果第一患者不匹配,而不是尋找其他你要找的病人,火柴。你應該擺脫else塊。我還加括號,使控制流程更清晰:

for (patient_class patient : patients) { 
    if (patient.getid().equals(search)) { 
     return patient; 
    } 
} 
// Only return null if we've checked *all* patients 
return null; 

此外,我強烈勸你開始下面的Java命名約定,重命名patient_classPatientgetid方法getId

for (Patient patient : patients) { 
    if (patient.getId().equals(search)) { 
     return patient; 
    } 
} 
return null; 
+0

謝謝,得到它的工作。我接受建議並將我的變量名稱更改爲更容易理解的名稱。 – 2013-05-04 20:12:20