簡體   English   中英

Java Arrays.binarySearch與compareTo

[英]Java Arrays.binarySearch with compareTo

我需要在自定義對象數組上使用Arrays.binarySearch。 這是對象:

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是Range元素的數組。 這工作得很好,並使用我編寫的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));   
}

Arrays.binarySearch接受兩個參數-一個要搜索的數組和您要查找的對象。 您提供了一個Range對象數組和一個int (自動裝箱為Integer )。 自然,您無法在Range數組中搜索Integer

相反,您應該創建要查找的Range對象。 例如:

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

Arrays.binarySearch(lowerBounds,0)是錯誤的,因為您正在比較范圍對象。因此,您需要傳遞范圍對象而不是整數對象,這會導致java.lang.ClassCastException:java.lang.Integer無法轉換為compareToTest。范圍”

您需要創建一個RangeObject並將其傳遞給binarySearch方法

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM