索引值信息。,java.util.Array

时间:2013-08-06 18:59:19

标签: java arrays

这是我试图执行的代码。,显然返回-negative值的代码,但任何理由是它返回-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 个答案:

答案 0 :(得分:3)

必须对数组进行排序,才能成功执行binary search algorithm

一旦排序,check the documentation.

具体做法是:

  

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

我们知道该数组中不存在该元素,因为返回的值为负数。另外,文档说-7是-(insertion point -1)。如果我们想要按排序顺序插入,那么让我们进行数学运算并计算 元素的位置。

-(-7+1) = 6

因此,在这种情况下,我们想要的正面实际插入点是6

由于您的数组未排序,此值无效。一旦您的数组 排序,就会发生一些帮助。

答案 1 :(得分:2)

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

编辑:此外,您的数组需要进行排序。

答案 2 :(得分:1)

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

java.util.Arrays.sort(myBubbleStr);

Array.binarySearch 也不执行不区分大小写的匹配。哟已经通过了binerysearch方法的错误论证。它应该是这样的:

Arrays.binarySearch(myBubbleStr, "Yow");

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

答案 3 :(得分:0)

由于几个原因,它正在返回-7。

  1. 返回值为负,因为您搜索的字符串不存在。
  2. 返回值的绝对值是7,因为这是搜索键存在时所占据的数组的索引。
  3. 第二个响应起初可能看起来有些模糊,但是binarySearch假定您的数组已经开始排序(使用String时按字典顺序排序),而您的数组不是。