我试图在对象阵列上使用二进制搜索。我正在使用对象,因为对于一个实例,我可能有一组字符串或ints
。我目前坚持实施我的compareTo
方法,并不确定下一步会是什么。
这是我到目前为止所拥有的 -
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时遇到错误,它说类型FiveThree中的方法binarySearch(Object [],Comparable)不适用于参数(String [],String)。我知道它,因为我的CompareTo
现在是空的,但我不知道如何制作&#34; Dustin&#34;或者我放在第二个比较而不是字符串的任何参数。此外,如果我在名称前面转换对象,它只能将它识别为对象而不是对象[]
感谢。
答案 0 :(得分:0)
您的解决方案基本上有效。
我正在尝试在对象阵列上使用二进制搜索。我正在使用对象,因为对于一个实例,我可能有一组字符串或整数
这表明你应该使用泛型,而不是Object[]
。如果这样做,则必须使用Integer[]
而不是int[]
,因为Java泛型不适用于基本类型。
由于compareTo
和String
已经实施Integer
,因此无需编写Comparable
方法。
我将Object
替换为T
(其中T extends Comparable<T>
)并且它正常工作。该程序打印2
。
public static <T extends Comparable<T>> int binarySearch(T[] items, T 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 <T extends Comparable<T>> int binarySearch(T[] items, T target){
return binarySearch(items, target, 0, items.length -1);
}
public static void main(String[] args) {
String[] names = {"Caryn", "Debbie", "Dustin", "Elliot", "Jacquie", "Jonathan", "Rich"};
int myName = binarySearch(names, "Dustin");
System.out.println(myName);
}