我正在尝试在对象数组上使用二进制搜索。 我使用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 []。
谢谢。

#1楼 票数:0 已采纳

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

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

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

无需编写compareTo方法,因为StringInteger已经实现了Comparable

我用T (其中T extends Comparable<T> )代替了Object ,它才起作用。 该程序将打印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);
}

  ask by jumpman8947 translate from so

未解决问题?本站智能推荐:

2回复

二进制搜索compareToString对象

我正在发送一个包含{“ love”,“ hate”,“ happy”,“ sad”,“ neutral”}的数组,每次我尝试使用二进制搜索方法搜索“ neutral”时,它都会告诉我找不到。 是什么导致这种情况发生?
2回复

递归二进制搜索和排序

我正在阅读未排序数字的列表: 我找到了二进制搜索,但是我不知道如何使用它按顺序插入值。 我需要更改我的insertInOrder方法,以便数字按升序排列。 现在,我的方法除了向后打印列表之外,实际上什么也没做。 编辑:
1回复

在Java中对随机访问文件实现二进制搜索

我正在用Java做一个程序,用户可以在其中使用随机访问文件创建“数据库”(.txt文件)并将记录存储在那里。 我正在实施二进制搜索,以便为用户提供按ID查找记录的选项。 这是可以正常工作的getRecord()方法,因为即使没有使用BinarySearch()方法,我也对其进行了测试。
3回复

二进制搜索对象数组[重复]

这个问题在这里已有答案: Java中==和equals()之间有什么区别? 23个答案 我得到了一些代码,其中包含一个Person对象数组,我将编写方法来进行二进制搜索,并覆盖Person类中的compareto方法,以便根据姓氏和名字进行比较。 我想我的大部分二进制搜索
1回复

通用二进制搜索使用连续字符键失败

我有一个通用的二进制搜索,似乎可以与Integer一起使用。 但是,当我尝试将它与String一起使用时,有时会崩溃,并在各行上出现一个ArrayIndexOutOfBoundsException ; 特别是我用一个单词多次使用相同的字母指定键。 例如String key = "peach
1回复

Java中的递归二进制搜索

我不明白为什么下面的代码返回0 。 首先,这是我的测试: 接下来,这是重要的实现部分: 最后,这是我的测试结果:
1回复

通过二进制搜索帮助递归(Java)

我们被告知使用 Recursion 类进行二分查找。 但是,根据我的教授(在我寻求帮助时没有详细说明)并与同学一起工作,我陷入困境,因为递归无法正常工作。 我们得出需要 int count 的结论,但我不确定在哪里或如何实现它。 Java 不是我最强的语言,因此指南或提示会非常有帮助。 这是打印出
5回复

在Java中使用递归进行二进制搜索

我正在编写一个用于递归二进制搜索的程序。 我有一个带有一系列已排序数字的输入文件,已将其添加到ArrayList中。 该程序搜索以查看用户输入给定的键是否在ArrayList中。 例如,假设密钥为90。我调试​​了手表并将其放置在key和array.get(median)处。 在逐步执