-1

这是我试图执行的代码。,在返回负值的代码上很明显,但是为什么它返回-7?我隐约理解它是基于数组的长度,但有人可以解释更多。谢谢你的帮助。

    public class FindNumberFromBinary {
    String myBubbleStr[] = {"Zoon","Hello","World", "Yep", "Yow", "MyData"};

    public String findString() {
        System.out.println(Arrays.binarySearch(myBubbleStr, "yow"));

        return "";
    }
    public static void main(String args[]){
        FindNumberFromBinary fnb= new FindNumberFromBinary();
        fnb.findString();
    }
}
4

4 回答 4

3

必须对数组进行排序才能使二进制搜索算法成功执行。

排序后,检查文档。

具体来说:

如果包含在数组中,则返回搜索键的索引;否则,(-(插入点)- 1)。插入点定义为将键插入数组的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定的键,则为 a.length。请注意,这保证了当且仅当找到键时,返回值将 >= 0。

我们知道该数组中不存在该元素,因为返回的值为负数。文档还说 -7 是-(insertion point -1). 如果我们想按排序顺序插入,让我们计算一下这个元素应该在哪里。

-(-7+1) = 6

所以在这种情况下,我们想要的积极的、真正的插入点是6.

由于您的数组未排序,因此该值无用。对数组排序后发生这种情况时提供一些帮助。

于 2013-08-06T19:01:16.350 回答
2

您搜索了“yow”,但您的数组有“Yow”(大写 Y)。返回值是该元素在列表中的位置的负索引 + 1。

编辑:另外,您的数组需要排序。

于 2013-08-06T19:01:46.733 回答
1

您的数组需要排序以执行二分搜索。有关类似问题,请参阅此链接。您可以使用以下内容进行排序:

java.util.Arrays.sort(myBubbleStr);

Array.binarySearch也不执行不区分大小写的匹配。你向 binerysearch 方法传递了错误的参数。它应该是这样的:

Arrays.binarySearch(myBubbleStr, "Yow");

因为你的数组包含'Yow'而不是'yow'

于 2013-08-06T19:03:19.050 回答
0

它返回 -7 有几个原因。

  1. 返回值为负数,因为您要搜索的字符串不存在。
  2. 返回值的绝对值为 7,因为这是您的搜索键存在时所占用的数组的索引。

第二个响应一开始可能看起来有点模糊,但 binarySearch 假设您的数组从开头排序(使用 时按字典顺序String),而您的不是。

于 2013-08-06T19:04:29.853 回答