【发布时间】:2015-11-12 01:25:30
【问题描述】:
有什么方法可以将我的 ArrayList myZips 中的 ZipCode 转换为 Integer,以便它可以作为我的距离方法的参数?
邮编类:
public class ZipCode
{
private int zipCode;
private String city;
private String state;
private double longitude;
private double latitude;
public ZipCode(int pZip)
{
zipCode = pZip;
city = "UNKOWN";
state = "ST";
latitude = 0.0;
longitude = 0.0;
}
public ZipCode(int pZip, String pCity, String pState, double pLat, double pLon)
{
zipCode = pZip;
city = pCity;
state = pState;
latitude = pLat;
longitude = pLon;
}
public void setZipCode(int zipCode) {
this.zipCode = zipCode;
}
public void setCity(String city) {
this.city = city;
}
public void setState(String state) {
this.state = state;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
public int getZipCode() {
return zipCode;
}
public String getCity() {
return city;
}
public String getState() {
return state;
}
public double getLatitude() {
return latitude;
}
public double getLongitude() {
return longitude;
}
public String toString() {
return city + ", " + state + zipCode;
}
}
public class ZipCodeDatabase {
private ArrayList<ZipCode> myZips;
public ZipCodeDatabase()
{
myZips = new ArrayList<ZipCode>();
}
public ZipCode findZip(int zip){
for(ZipCode zipCode : myZips){
if(zipCode.getZipCode() == zip){
return zipCode;
}
}
return null;
}
public double distance(int zip1, int zip2) {
int EARTH_RADIUS = 3959;
if (findZip(zip1) != null && findZip(zip2) != null) {
ZipCode z1 = new ZipCode(zip1);
ZipCode z2 = new ZipCode(zip2);
double lat1 = Math.toRadians(z1.getLatitude());
double long1 = Math.toRadians(z1.getLongitude());
double lat2 = Math.toRadians(z2.getLatitude());
double long2 = Math.toRadians(z2.getLongitude());
double p1 = Math.cos(lat1) * Math.cos(long1) * Math.cos(lat2) * Math.cos(long2);
double p2 = Math.cos(lat1) * Math.sin(long1) * Math.cos(lat2) * Math.sin(long2);
double p3 = Math.sin(lat1) * Math.sin(lat2);
double distance = Math.acos(p1+p2+p3) * EARTH_RADIUS;
int distance1 = (int)Math.round(distance);
return distance1;
}
else {
return -1;
}
}
public ArrayList <ZipCode> withinRadius(int pZip, int pRadius){
ArrayList<ZipCode> zips = new ArrayList<ZipCode> ();
if (findZip(pZip) != null){
for (int i = 0; i < myZips.size(); i++){
if (distance(pZip, myZips.get(i)) <= pRadius) //the trouble is here, how can I convert the myZips.get(I) into the relevant 5 digit integer .
zips.add(pZip);
}
}
return zips;
}
}
我知道这是一个非常专业和基本的问题,但我是 Java 新手,似乎无法弄清楚。
【问题讨论】:
-
可能是
Integer.parseInt(myZips[i])? -
ZipCode类是什么样的? -
我会坚持使用 ZipCode 并将 int 参数更改为 ZipCode。 Ints 可能在您居住的地方工作,但在这里,我们在邮政编码中既有字母也有数字。
-
它说它需要一个数组,但找到了一个 ArrayList。
-
findZip不只是在做myZips.contains(zip)吗?除了返回对象而不是 true/false。
标签: java