我试图写一个处理位置的课程,例如00501 Holtsville NY 40.922326 -72.637078, 00544 Holtsville NY 40.922326 -72.637078
。
除了可比较部分之外,我能够解决所有问题。我试图修改提供的方法,以便根据地点的城市名称返回比较。
public class PostalCodes implements Comparable {
private String city;
private double latitude;
private double longitude;
private String zip;
private String state;
public PostalCodes(String aZip, String aCity, String aState, double aLatitude, double aLongitude)
{
city = aCity;
latitude = aLatitude;
longitude = aLongitude;
zip = aZip;
state = aState;
}
void setZip(String aZip)
{
zip=aZip;
}
void setState(String aState)
{
state=aState;
}
void setLocation(String aCity)
{
city = aCity.trim();
}
void setLatitude(double lat)
{
latitude = lat;
}
void setLongitude(double long1)
{
longitude = long1;
}
public String getState()
{
return state;
}
public String getZip()
{
return zip;
}
public String getLocation()
{
return city;
}
public double getLatitude()
{
return latitude;
}
public double getLongitude()
{
return longitude;
}
public String toString()
{
String result = String.format("%s %s,%s (%1.3f; %1.3f)",zip, city, state, latitude,longitude);
return result;
}
@Override
public int compareTo(Object arg0) {
// Confused
return 0;
}
}
会不会像
public int compareTo (Object arg0){
if (arg0>city)
return True;
非常感谢任何和所有帮助。请保持简单,这是我第一次尝试实施可比较的东西。
编辑:
当我尝试在主体中对数组进行排序时,如下所示....
公共课Hmwk {
public static void main(String[] args) throws IOException {
URL url = new URL("http://noynaert.net/zipcodes.txt");
Scanner input=new Scanner (url.openStream());
int counter =0;
final int MAX_SIZE=50000;
PostalCodes[] codesArray= new PostalCodes[50000];
while (input.hasNextLine() && counter < MAX_SIZE)
{
String line=input.nextLine();
String[] tokens;
tokens = line.split("\t");
if (tokens.length != 5)
{
continue;
}
String zip=tokens[0];
String city=tokens[1];
String state=tokens[2];
double lat=Double.parseDouble(tokens[3]);
double longy=Double.parseDouble(tokens[4]);
PostalCodes code=new PostalCodes(zip,city,state,lat,longy);
codesArray[counter]= code;
counter++;
}
Arrays.sort(codesArray);
for (int i =0;i<counter; i+=1000)
{
System.out.println(codesArray[i].toString());
}
}
} 我收到了错误
Exception in thread "main" java.lang.NullPointerException
at PostalCodes.compareTo(PostalCodes.java:69)
at PostalCodes.compareTo(PostalCodes.java:1)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at Hmwk.main(Hmwk.java:37)
上帝的绿色地球在这里发生了什么?
答案 0 :(得分:3)
首先,你应该真的输入你的Comparable
。这样,您无需强制转换就可以访问要比较的对象。
public class PostalCodes implements Comparable<PostalCodes>
然后,当您实施compareTo
时,您只需要在city
字段上执行此操作。
public int compareTo(PostalCodes other) {
return city.compareTo(other.getLocation());
}
您可能需要检查对象null
上的other
或两个实例中的city
。
您可能希望与其他字段进行比较,但根据您向我们展示的内容,两个PostalCodes
根据其city
字段进行比较。以上是这样做的方法。
如果您需要比较更多字段,则可以将它们添加进去。
(通过让city
更加传统的吸气剂,你也可以得到更好的服务。)
答案 1 :(得分:0)
在类compareTo
方法中,您始终可以调用compareTo
类的String
方法来比较String类型的属性。我beleive城市名称是String类型。对于整数,使用compareTo of Integer class。