2012-09-24 3 views
1

저는 아직 프로그래밍 과정에서 아주 초록색이며 Java의 배열에서 이진 검색 구문과 관련된 문제를 겪고 있습니다. 내가 이진 검색을 사용하고있는 클래스에서 별도의 클래스에 존재하는 비교 메서드 (오버로드 된 "비교"메서드)를 호출하려고합니다. 본질적으로 내 목표는 저장된 변수 중 하나만 배열을 검색하는 것입니다 배열을 구성하는 객체 비교자를 사용하지 않으면 검색에 필요한 기준 만 키로 유지하기 위해 "더미"개체를 만들었으므로이 작업을 수행하는 데 실패했습니다. 이 내 코드가 다시 오버로드 비교입니다다른 클래스에있는 비교자를 가진 객체에 대한 Java 배열 이진 검색

Song searchSong = new Song(artistInput, artistInput, artistInput); 
int search = Arrays.binarySearch(songs, searchSong, new compare<Song>()); 

, 별도의 클래스 :

public int compare (Song firstSong, Song secondSong) { 
    return firstSong.getArtist().compareTo(secondSong.getArtist()); 
} 

나는 확신이 그냥 뭔가 여기

은 이진 검색에 대한 내 코드입니다 간단한 나는 놓치고있다. 그러나 나는 아직 답을 찾지 못했다. 어떤 도움을 주셔서 감사 드리며 자세한 내용이 필요하시면 알려 주시기 바랍니다. 이진 검색 코드가 현재 양식에서 작동하지 않는다는 것을 알고 있습니다.

+0

1) 문제점 (컴파일 오류/런타임 오류/잘못된 결과)은 무엇입니까? 2) 클래스가 java.util.Comparator를 확장합니까? 3) Java의 모든 클래스 이름은 대문자로 시작합니다 – SJuan76

+0

죄송 합니다만 귀하의 질문은 무엇입니까? stackoverflow 및 프로그래밍에 익숙하지 않을 수도 있지만 질문을 올바르게해야한다는 것을 알고 있습니까? 나는 당신이 오버라이드를 의미하고 오른쪽 과부하가 아닌 것을 짐작하고 있습니까? 그리고 여러분이 제공 한 코드 스 니펫은 compare가 클래스가 아니면 컴파일되지 않습니다. 어떤 경우에는 대문자로 이름을 지정해야합니다. 이것은 모두 가혹한 것처럼 들리 겠지만 바이너리 검색과 같은 API에 뛰어 들기 전에 기본 사항을 알아야합니다. – CKing

+0

compare는 클래스가 아니라 메소드입니다. 내가 분명하지 않으면 미안해. 그리고 네, 오버라이드가 아니라 오버로드를 의미합니다. –

답변

1

클래스 이름이 Comparator compare을 구현합니까?

이처럼 비교기 클래스가있는 경우 : -

public class MyComparator implements Comparator<Song> { 
    /** Your compare method ***/ 
} 

Arrays.binarySearch()에 대한 귀하의 호출 매개 변수로 new MyComparator()을해야 ..

+0

사과드립니다. 나는 분명하지 않았습니다. Song 클래스는 Comparator를 구현합니다. 나는 그 클래스 내에서 내 자신의 compare 메소드로 compare 메소드를 오버라이드했다. 다른 클래스에서 이진 검색을 호출하고 Song 클래스에서 작성한 compare 메서드를 사용하려고합니다. 그러나, 나는 내가 잘못하고있는 것을 발견했다고 믿습니다. 의견을 보내 주셔서 감사합니다. –

+0

그 Ok .. 가끔은 일이 엉망이된다 .. 하루가 끝날 때 문제는 문제가 해결되었는지 아닌지에 달려있다. –

4

자바 8

Song searchSong = new Song(artistInput, artistInput, artistInput); 
int search = Arrays.binarySearch(songs, searchSong, new Comparator<Song>(){ 
    @Override 
    public int compare(Song s1, Song s2) { 
     return s1.getArtist().compareTo(s2.getArtist()); 
    } 
}); 

UPDATE를 시도 :

int search = Arrays.binarySearch(songs, searchSong, 
    (Song s1, Song s2) -> s1.getArtist().compareTo(s2.getArtist())); 
관련 문제