从ArrayList中检索

时间:2015-02-17 16:11:33

标签: java 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;
}

我想获得服务&#34;牙医,牙科服务&#34;和眼科中心,专家&#34;作为输出,我将Latitude视为1,将Longtitude输入为JTextField中的74。

相反,我得到了#34;医院,癌症服务&#34;和&#34;医院,心脏病服务&#34;当他输出时。

2 个答案:

答案 0 :(得分:1)

也许我不理解你的问题,但是你不想看看一系列的纬度和经度?像,

 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)单位宽,以纬度和经度为中心。

由于lat和lon是双打的,你无法找到完全匹配,我怀疑你想要列出所有&gt;的服务。某个位置,但您是不是在搜索 关闭 到某个位置的所有服务?如果是这样,那么上面的代码应该可以工作,并且接近度将由DELTA_LAT和DELTA_LON常量设置(如果需要,可以将它们组合成单个DELTA常量)。

答案 1 :(得分:1)

lat + 5和lon + 5是你的问题。如果lat = 1 + 5,你会经过眼科中心lat和牙医lat,所以肯定不会返回。我想你想要一个位置并获得附近的服务,所以为什么不使用

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

而不是

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

?它将返回给定lat + 5,lon + 5范围内的服务。

如果你想要一个像1-5和70-80那样的范围:

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