二进制搜索CompareTo Java

jumpman8947

我正在尝试在对象数组上使用二进制搜索。我使用的是object,因为对于一个实例,我可能有一组字符串或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现在是空的,但是我不知道如何使“ Dustin”或我放在第二位的任何参数成为Comparable而不是字符串。另外,如果我在名称前面投射对象,则只能将其识别为对象,而不是Object []。
谢谢。

保罗·波丁顿

您的解决方案基本上可以正常工作。

我正在尝试在对象数组上使用二进制搜索。我正在使用对象,因为对于一个实例,我可能有一组字符串或整数

这表明您应该使用泛型而不是Object[]如果这样做,则必须使用Integer[]而不是int[]因为Java泛型不适用于原始类型。

有没有必要写compareTo,因为方法StringInteger已经落实Comparable

我替换ObjectT(where 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);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章