我在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;当他输出时。
答案 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 )