2014-04-02 4 views
1

위치를 처리하는 클래스 (예 : 00501 Holtsville NY 40.922326 -72.637078, 00544 Holtsville NY 40.922326 -72.637078)를 작성하려고합니다.Java에서 Comparable 구현

필자는 Comparable 부분을 제외한 모든 것을 알아낼 수있었습니다. 제공된 메서드를 수정하여 해당 도시의 도시 이름을 기반으로 비교를 반환하려고합니다.

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; 

처럼 될 것이다. 그것을 간단하게 유지하십시오, 이것은 Comparable 것을 구현하려고 시도한 첫 번째 것입니다.

편집 :

나는 아래와 같이 내 주요의 배열을 정렬하려고 ....

공용 클래스 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을 입력해야합니다. 이렇게하면 캐스팅하지 않고 비교할 개체에 액세스 할 수 있습니다. 당신이 compareTo을 구현할 때

public class PostalCodes implements Comparable<PostalCodes> 

그런 다음, 당신은 단지 city 필드에 그것을 할 필요가있다.

public int compareTo(PostalCodes other) { 
    return city.compareTo(other.getLocation()); 
} 

당신은 객체 두 경우 모두에서 other, 또는 citynull을 확인 할 수 있습니다.

비교할 다른 필드가있을 수 있지만 표시되는 내용은 PostalCodes이며 city 필드를 기준으로 비교됩니다. 위는 그렇게하는 방법입니다.

당신은 비교할 필요 이상의 필드가있는 경우, 당신은 그들을 추가합니다.

(당신은 또한 더 이상 기존의 city 대한 게터함으로써 제공 될 것입니다.)

+0

널 체크 PLS를 'public int compareTo (다른 우편 번호) {돌아 가기 other == null? 1 : city.compareTo (other.getLocation()); }' – huocp

+0

null check에서 기술적으로 올바르지 만, 구현에 특화된 것입니다. 만약'city'가 결코 null이 아니게 보장된다면, 그럴 필요가 없습니다. 즉, 여기서 초기에 null 체크가없는 것은 해당 가정이 유효하지 않을 수있는 장소를 강조 표시합니다. – Makoto

+0

굉장히 고마워. – user102817

0

클래스 compareTo 메서드에서 String 메서드는 항상 compareTo 메서드를 호출하여 String 유형의 특성을 비교할 수 있습니다. I beleive city name은 String 유형입니다. 정수의 경우 Integer 클래스의 compareTo를 사용합니다.