2014-04-02 50 views
1

我正在嘗試編寫一個處理位置的類,如00501 Holtsville NY 40.922326 -72.637078, 00544 Holtsville NY 40.922326 -72.637078在Java中實現類比

我已經能夠找出除了可比較部分之外的所有東西。我試圖修改提供的方法,以便它將返回基於該地點的城市名稱的比較。

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) 

上帝的綠色地球上發生了什麼?

回答

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。以上是做到這一點的方法。

如果您有需要比較對更多的領域,你會在添加它們。

(您也將通過使您的getter方法city更傳統得到更好的服務。)

+0

空校驗PLS 'public int compareTo(PostalCodes other){return other == null? 1:city.compareTo(other.getLocation()); }' – huocp

+0

對於空檢查在技術上是正確的,但這是特定實現 - 如果'city'保證永遠不爲null,那麼就沒有必要。那,並且在這裏早些時候沒有空檢查,突出顯示那個假設可能是無效的地方。 – Makoto

+0

真棒真我欣賞它 – user102817

0

在您的類compareTo方法中,您始終可以調用compareTo方法String類來比較String類型的屬性。我相信城市名稱是String類型。用於Integer類的整數使用compareTo。