对于我当前的项目,我必须搜索ArrayList of ZipCode对象,以便找到距离用户输入的int zip最远的ZipCode。
下面是编写我遇到问题的方法的说明:public ZipCode findfurtwest(int-pZip)-查找距离提供的邮政编码最远的ZipCode。如果未找到邮政编码,则返回null。例如,距离邮政编码75234最远的是ADAK,AK 99546。
在我的代码中,我使用public int distance(int zip1,int zip2)方法来计算用户输入的zip和ArrayList对象的zip之间的距离。我不知道如何编写正确的if语句来找到最远的ZipCode。谢谢你的帮助,我非常感激。
public class ZipCodeDatabase {
private ArrayList<ZipCode> list;
/**
* Constructor for objects of class ZipCodeDatabase
*/
public ZipCodeDatabase()
{
// initialise instance variables
list = new ArrayList<ZipCode>();
}
/**
* Method findZip searches loops through the ArrayList and returns all of the ZipCodes
*
* @param int zip
* @return null
*/
public ZipCode findZip(int zip)
{
// put your code here
for(ZipCode z : list){
if(z.getZip() == zip){
return z;
}
}
return null;
}
/**
* Method distance calculates the distance between two user entered zip codes numbers
*
* @param int zip1, int zip2
* @return int
*/
public int distance(int zip1, int zip2){
ZipCode z1 = new ZipCode(zip1);
ZipCode z2 = new ZipCode(zip2);
z1 = findZip(zip1);
z2 = findZip(zip2);
double lat1 = z1.getLat();
double lat2 = z2.getLat();
double lon1 = z1.getLon();
double lon2 = z2.getLon();
final int EARTH_RADIUS = 3959;
if(list.contains(z1) && list.contains(z2)){
double p1= Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lon1))
* Math.cos(Math.toRadians(lat2)) * Math.cos(Math.toRadians(lon2));
double p2 = Math.cos(Math.toRadians(lat1)) * Math.sin(Math.toRadians(lon1))
* Math.cos(Math.toRadians(lat2)) * Math.sin(Math.toRadians(lon2));
double p3 = Math.sin(Math.toRadians(lat1)) * Math.sin(Math.toRadians(lat2));
double distance = Math.acos(p1 + p2 + p3) * EARTH_RADIUS;
double d = distance;
int dist = (int) d;
return dist;
}
else{
return -1;
}
}
/**
* Method withinRadius finds all of the ZipCode objects within the radius of the entered
* zip
* @param int pZip, int pRadius
* @return list
*/
public ArrayList<ZipCode> whithinRadius(int pZip, int pRadius){
for(ZipCode z: list){
if(distance(pZip, z.getZip()) <= pRadius){
ArrayList<ZipCode> radius = new ArrayList<>();
radius.add(z);
return radius;
}
else{
ArrayList<ZipCode> radius = new ArrayList<>();
}
}
return list;
}
/**
* Method findFurthest finds the furthest ZipCode from the user entered zip
*
* @param int pZip
* @return null
*/
public ZipCode findFurthest(int pZip){
if(list.contains(pZip)){
for(ZipCode z : list){
if(distance(pZip, z.getZip()) < distance(pZip, z.getZip())){
return z;
}
}
}
return null;
}
/**
* Method search find all of the ZipCode objects with a city name that contains the user
* entered string
* @param String str
* @return list
*/
public ArrayList<ZipCode> search(String str){
ArrayList<ZipCode> matchStr = new ArrayList<>();
for(ZipCode z : list){
if(z.getCity().contains(str)){
matchStr.add(z);
return matchStr;
}
else{
return matchStr;
}
}
return list;
}
/**
* Method readZipCodeDatabase reads the file containing all of the zip codes
*
* @param String filename
* @return int
*/
public void readZipCodeData(String filename){
Scanner inFS = null;
FileInputStream fileByteStream = null;
try{
//open the file and set delimeters
fileByteStream = new FileInputStream(filename);
inFS = new Scanner(fileByteStream);
inFS.useDelimiter("[,\r\n]+");
filename = "zipcodes.txt";
// continue while there is more data to read
while(inFS.hasNext()) {
// read five data elements
int zip = inFS.nextInt();
String city = inFS.next();
String state = inFS.next();
double lat = inFS.nextDouble();
double lon = inFS.nextDouble();
ZipCode z = new ZipCode(zip, city, state, lat, lon);
ArrayList<ZipCode> list = new ArrayList<>();
list.add(z);
}
fileByteStream.close();
//error while reading the file
}catch(IOException error1){
System.out.println("Error: Unable to read file: " + filename);
}
}
}
这段代码应该可以做到:
public ZipCode findFurthest(int pZip)
{
return list.stream()
.max((zip0, zip1) -> distance(pZip, zip0.getZip())
- distance(pZip, zip1.getZip()))
.orElse(null);
}
这没什么特别的——只是一个普通的最小值代码。请编写测试来检查这个方法是否真的有效。
问题内容: 我有很多类似的对象,像这样; 我想用关键字搜索这些对象的值(而不是键),并返回在任何值中都包含关键字的对象数组。 因此,例如,使用关键字,我将获得所有对象(对象#1中的“ baR”,对象#2中的“ loRem”和对象#3中的“ doloR”)。使用关键字,我将得到对象2和3(“ LOrem”和“ doLOr”),使用关键字,我将得到对象1和3(“ bAr”和“ Amet”)。但是,使用
我使用的是Spring Data JPA。
问题内容: 我的应用程序中有一个JSON字符串/对象。 我的应用程序中有一个过滤器框,当我在该框中输入名称时,我们必须过滤该对象并显示结果。 例如,如果用户键入“名称”并点击搜索,那么我们必须在JSON对象中搜索全名并返回数组,就像MySQL搜索一样。 我的问题是用字符串过滤json对象并返回数组。 问题答案: 您可以遍历数组并找到匹配项:
我需要在数组上使用二进制搜索来找到它们的索引。我能够做到这一点,但是我现在需要使用数组类型为Integer而不是int的对象。 这里有一个问题:“为binarySearch方法提供代码,记住它接收的参数是Object type Object,如果其中任何一个用于调用compareTo方法,则必须首先将其强制转换为可比或原始对象类型。”
问题内容: 我有一堂课。它具有以下特征; 它具有2个属性,和。1个人可以拥有许多电话,因此您可能会在下面看到具有多个ID的人。 还有另一门课叫。它将有一个称为的方法。 personList,具有3-4个Person对象。我需要搜索PersonArrayList并找到与Person对象匹配的对象。我怎样才能做到这一点? 注意:我尝试过。但这是行不通的。 问题答案: 我尝试了personList.co
本文向大家介绍在C#中搜索SortedList对象,包括了在C#中搜索SortedList对象的使用技巧和注意事项,需要的朋友参考一下 要在SortedList对象中进行搜索,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-