从 ArrayList 中检索

Retrieving from ArrayList

我在 ArrayList 中检索所需对象时遇到问题。 我没有得到想要的对象,而是从 ArrayList 中得到了其他对象。

这是我的 ArrayList:

public Database () {
    this.mPatient=new ArrayList();
    mPatient.add(new Patient("Dummy", "S11111", 12345, "No", "9march" ));

    this.mService=new ArrayList();
    mService.add(new Service("Dentist", 1.2345, 74.12345,"Dental Services"));
    mService.add(new Service("Eye Center", 2.2345, 75.12345,"Specialist"));
    mService.add(new Service("Hospital", 12.2345, 90.12345,"Cancer Service"));
    mService.add(new Service("Hospital", 14.2345, 91.12345,"Cardiac Service"));
    mService.add(new Service("Hospital", 8.2345, 76.12345,"Skin Care"));
}

我有一个按钮可以检索服务。

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
       double plat = Double.valueOf(jTextField6.getText());
       double plon = Double.valueOf(jTextField7.getText());

       jTextArea1.setText(controller.getLocation(plat, plon));
}

这是我的 getLocation 方法:

public String getLocation (double lat, double lon) {
    ArrayList<Service> allService = mDatabase.retLocation(lat, lon);

    String finaldata="";

    for(int i=0; i<allService.size();i++)
    {
         Service tempService = allService.get(i);
         finaldata += tempService.getDetail();
    }
    return finaldata;
}

和我的 retrieveLocation 方法。

public ArrayList<Service> retLocation (double lat, double lon) {
    ArrayList<Service> allservice = new ArrayList<Service>();
    for(int i=0; i<mService.size();i++)
    {
        Service tempService = mService.get(i);
        if(tempService.getLat()>=lat+5 &&tempService.getLon()>=lon+5)
        {
            allservice.add(tempService);
        }
    }
    return allservice;
}

我想获得服务 "Dentist, Dental Services" 和 "Eye Center, Specialist" 作为输出,所以我在 JTextField 中输入纬度 1 和经度 74。

相反,他输出的是 "Hospital, Cancer Service" 和 "Hospital, Cardiac Service"。

也许我不明白你的问题,但你不想看看纬度和经度的范围吗?像,

 for(int i=0; i<mService.size();i++) {
    Service tempService = mService.get(i);
    double tempLat = tempService.getLat();
    double tempLon = tempService.getLon();

    // DELTA_LAT and DELTA_LON are both constants possibly = to 5
    if(tempLat <= lat + DELTA_LAT && tempLat >= lat - DELTA_LAT && 
       tempLon <= lon + DELTA_LON && tempLon >= lon - DELTA_LON) {
           allservice.add(tempService);
    }
 }

此代码将标识 2 * DELTA_LAT (10) 个单位高乘以 2 * DELTA_LON (10) 个单位宽、以纬度和经度为中心的矩形内的所有服务。

由于纬度和经度是双精度数,因此您无法找到完全匹配的内容,而且我怀疑您是否想要列出 > 某个位置的所有服务,而是搜索 关闭到某个位置?如果是这样,那么上面的代码应该可以工作,并且接近度将由 DELTA_LAT 和 DELTA_LON 常量设置(如果需要,您可以将它们组合成一个 DELTA 常量)。

lat+5 和 lon+5 是你的问题。使用 lat=1+5 你会经过眼中心纬度和牙医纬度,所以这些肯定不是 returned。我想你想给一个职位并获得附近的服务,所以你为什么不使用

 if(tempService.getLat()<=lat+5 &&tempService.getLon()<=lon+5)

而不是

 if(tempService.getLat()>=lat+5 &&tempService.getLon()>=lon+5)

?它将 return 在您给定的 lat+5, lon+5 范围内提供服务。

如果您想要像纬度 1-5 和经度 70-80 这样的范围:

 if(tempService.getLat()<=5 && 
    tempService.getLat()>=1 && 
     tempService.getLon()<=80 &&
       tempService.getLon()>=70 )