Мне нужно использовать Arrays.binarySearch для массива пользовательских объектов. Вот объект:Java Arrays.binaryПоиск с 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;
}}
В моей основной I первого вызова Arrays.sort(lowerBounds);
где lowerBounds является массивом элементов Range. Это работает просто отлично и сортирует их, используя compareTo, я написал. Затем я вызываю Arrays.binarySearch(lowerBounds, 0)
, но я получаю «Исключение в потоке» main «java.lang.ClassCastException: java.lang.Integer нельзя использовать для сравненияToTest.Range».
Что я делаю неправильно? Спасибо.
Edit: здесь главный:
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 (lowerBounds, новый Range (0,0));' поскольку ключевой объект (второй параметр) имеет чтобы быть тем же типом, что и массив, в который вы проходите. –
Второй параметр 'binarySearch' - это значение для поиска, поэтому он не должен быть int, а объектом« Range ». – jCoder