0

我有一个数组列表,其中记录存储为对象。在另一种形式中,我允许用户输入一个 id 并使用相应的 id 检索该记录的数据。

我的问题是,我只能检索一条记录,这意味着只有我存储在 arraylist 中的第一条记录。

如果我输入第二条记录并且尝试使用 id 搜索记录,我会收到消息“invalid id”,这是我为确保用户不会输入无效 id 而分配的消息。

这是我用来将对象存储到数组列表中的代码:-

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 条记录?当我输入第二条记录并单击注册时,我的程序显示“成功注册”,但我无法搜索该记录,但我可以使用我制作的另一种方法删除该记录。

做错了什么?

4

1 回答 1

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_class为:PatientgetidgetId

for (Patient patient : patients) {
    if (patient.getId().equals(search)) {
        return patient;
    }
}
return null;
于 2013-05-04T19:59:03.520 回答