Я пытаюсь использовать двоичный поиск в массиве объектов. Я использую объект, потому что для одного экземпляра у меня может быть набор строк или ints
. Я в настоящее время застрял в реализации моего метода compareTo
, не совсем уверен в следующем шаге. Вот то, что я до сих пор -Бинарный поиск CompareTo Java
public static int binarySearch(Object[] items, Comparable target, int first, int last){
if(first > last)
return -1; // Base case for unsuccessful search
else{
int middle = (first + last)/2; // Next probe index.
int compResult = target.compareTo(items[middle]);
if(compResult == 0)
return middle; // Base case for unsuccessful search.
else if (compResult <0)
return binarySearch(items, target, first, middle -1);
else
return binarySearch(items, target, middle + 1, last);
}
}
public static int binarySearch(Object[] items, Comparable target){
return binarySearch(items, target, 0, items.length -1);
}
@Override
public int compareTo(T obj) {
return 0;
}
public static void main(String[] args){
String[] names = {"Caryn", "Debbie", "Dustin", "Elliot", "Jacquie", "Jonathan", "Rich"};
int myName = binarySearch(names, "Dustin");
я получаю ошибку, когда я называю BinarySearch это говорит Метод BinarySearch (Object [], Сопоставимые) в типе FiveThree не применяется для аргументов (String [], String). Я знаю его, потому что мой CompareTo
пуст прямо сейчас, но я не знаю, как сделать «Dustin» или какой-либо параметр, который я ставил второй вместо Comparable. Также, если я бросаю объект перед именами, он распознает его только как объект, а не объект [].
Спасибо.
Почему вы используете необработанные типы, а не дженерики? – RealSkeptic
Я думаю, это плохо с моей стороны, поэтому я должен изменить его на что-то вроде List names = Arrays.asList («Caryn», «Debbie», «Dustin», «Elliot», «Jacquie», «Jonathan», «Rich «); –
jumpman8947
@ jumpman8947 № RealSkeptic означает, что вы не должны использовать необработанный тип 'Comparable'. Использование массива в порядке. –