2013-07-29 96 views
0

我想根据用户给出的日期返回患者的医生列表。但每次运行该方法时,它都会返回所有医生的列表,而不是被过滤。搜索病人使用方法过滤arraylist

public boolean searchDatesForDoc(Date date){ 
    for(Date i : datesOfVisit) 
    { 
     if(i.equals(date)) 
     { 
     return true; 
     } 
    } 
    return false; 
} 

我已经初始化2例即patient1和患者2日期

守则主要

public void printDoctorsWithPatientsOnDate() throws ParseException 
{ 
    ArrayList<String> docs = new ArrayList(); 
    System.out.print("Enter the date(mm-dd-yyyy): "); 
    Date dt = new SimpleDateFormat("MM-dd-yyyy").parse(sc.nextLine()); 
    docs = app.getDoctorsWithPatientsOnDate(dt); 
    for(String i : docs) 
    { 
    System.out.println(i); 
    } 
} 

方法过滤

public ArrayList<String> getDoctorsWithPatientsOnDate(Date date) 
{ 
    ArrayList<String> doctors = new ArrayList(); 
    for(Patient i : patientList) 
    { 
     if(i.searchDatesForDoc(date) == true); 
     { 
      doctors.add(i.getDoctorName()); 
     } 
    } 
    return doctors; 
} 

方法。患者1的医生被命名为dr.lee,患者2的医生被命名为dr.james。首先,我为患者1输入以下信息,并且我没有任何(现在)留下患者2。

Enter the Patient's name: patient1 
Enter the assessment: alz 
Enter the date of Visit(mm-dd-yyyy): 10-02-2010 

问题出现在我拿到医生名单时。即使日期错误,它仍会继续打印列表上的每位医生。

Enter the date(mm-dd-yyyy): 11-20-2012 
dr.lim 
dr.james 
+1

'if(i.serachDatesForDoc(date)== true)' - 你不需要'== true'。由于'searchDatesForDoc'返回一个布尔值,你可以使用它作为条件。我怀疑这是你的问题 - 我不明白为什么会这样 - 但它可能有帮助。 – MrB

+0

@MrB我尝试了你说的话,但没有发生任何事。我仍然有同样的问题.. – ZeroStream

回答

0

由于一些未知的原因(无论如何),我给出的接受答案已被主持人删除。 问题已解决。问题是他在if语句之后有一个额外的分号。

0

我没有所有的代码来重现,但我会专注于searchDatesForDoc方法。试试这个:

public ArrayList<String> getDoctorsWithPatientsOnDate(Date date) 
{ 
    ArrayList<String> doctors = new ArrayList(); 
    for(Patient i : patientList) 
    { 
     System.out.println("Current patient is: " + i.getPatientName()); 
     if(i.searchDatesForDoc(date) == true); 
     { 
      doctors.add(i.getDoctorName()); 
     } 
    } 
    return doctors; 
} 

public boolean searchDatesForDoc(Date date){ 
    for(Date i : datesOfVisit) 
    { 
     if(i.equals(date)) 
     { 
      System.out.println("\tVisited on day: " + i); 
     return true; 
     } 
    } 
    return false; 
} 

当您运行与两行补充说,它会打印病人姓名,随后与该患者走访了天。首先要检查的是患者是否确实在上述日期访问过。如果没有,那么你的问题就在那里。使用调试器来跟踪代码的每个步骤会更容易。

+0

尝试了你说的和这里的输出。我输入了错误的日期,它仍然印在医生笑 输入日期(MM-DD-YYYY):10-02-2010 当前病人:patient1 当前病人:patient2 dr.lim 詹姆士 – ZeroStream

+0

现在尝试将'System.out.println'(“Current ...”)命令移到'if'语句中(因此将它移动两行),让我们知道它是做什么的。 – MrB