2014-02-09 80 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; 
}} 

以我主我第一呼叫Arrays.sort(lowerBounds);其中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

在哪裏'的main()'-code?但我的猜測是嘗試'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你需要傳遞一個Range對象,而不是一個整數對象,導致java.lang.ClassCastException的:JAVA。 lang.Integer不能轉換爲compareToTest.Range」

你需要創建一個RangeObject,並傳遞它的binarySearch方法

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