2014-02-09 3 views
-1

커스텀 객체 배열에 대해 Arrays.binarySearch를 사용해야합니다.Java Arrays.binarySearch with compareTo

class Range implements Comparable<Range>{ 

public int bottom; 
public int top; 

public Range(int botIn, int topIn) { 
    this.bottom = botIn; 
    this.top = topIn; 
} 

@Override 
public int compareTo(Range compareRange) { 
    int compareQuantity = ((Range) compareRange).bottom; 
    return this.bottom - compareQuantity; 
}} 

lowerBounds이 범위 요소의 배열 내 주요 내가 첫 번째 통화 Arrays.sort(lowerBounds);에서 다음은 객체입니다. 이것은 잘 작동하며 내가 쓴 compareTo를 사용하여 정렬합니다. 그런 다음 Arrays.binarySearch(lowerBounds, 0)을 호출하지만 "스레드의 예외"주 "java.lang.ClassCastException : java.lang.Integer를 compareToTest.Range로 형변환 할 수 없습니다"라는 메시지가 나타납니다.

내가 뭘 잘못하고 있니? 고맙습니다.

편집 : 여기에 주요이다 :

public static void main(String[] args) 
{ 
    int[] A = {1, 5, 2, 1, 4, 0}; 
    // write your code in Java SE 6 

    Range[] lowerBounds = new Range[A.length]; 
    for(int i=0; i< A.length; i++) 
    { 
     lowerBounds[i] = new Range(i-A[i], i+A[i]); 
    } 

    Arrays.sort(lowerBounds); 

    for(int i=0; i< A.length; i++) 
    { 
     System.out.println(lowerBounds[i].bottom); 
    } 
    System.out.println(Arrays.binarySearch(lowerBounds, 0)); 
} 
+1

키 객체 (두 번째 매개 변수) 인'Arrays.binarySearch (lowerBounds, new Range (0,0)); ' –

+2

'binarySearch'의 두 번째 매개 변수는 검색 할 값이므로 int가 아니라 'Range' 객체 여야합니다. – jCoder

답변

4

Arrays.binarySearch는 두 개의 매개 변수를 받아들이는 -에서 검색 할 배열을하고, 객체는 당신이 찾고 있습니다. Range 개체와 int (여기에는 Integer으로 자동 저장 됨) 배열이 제공되었습니다. 당연히 Range 초 배열로 Integer을 검색 할 수 없습니다.

대신 찾고있는 Range 개체를 만들어야합니다. 예 : 자바 :

Range r = new Range (0, 0); 
Arrays.binarySearch (lowerBounds, r); 
1

Arrays.binarySearch (lowerBounds는, 0) 범위 Objects.SO을 비교하고 있기 때문에 당신이 java.lang.ClassCastException가 결과 정수 개체 대신 Range 개체를 전달할 필요가 잘못된 것입니다. lang.Integer이 compareToTest.Range "

캐스트 할 수없는 당신은 RangeObject을 만들고 binarySearch 방법에 전달할 필요가있는 '주()`-code입니까?하지만 내 추측하는 것

Range r = new Range(0,<any integer>) 
Arrays.binarySearch (lowerBounds, r);