这是我试图执行的代码。,显然返回-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();
}
}
答案 0 :(得分:3)
必须对数组进行排序,才能成功执行binary search algorithm。
具体做法是:
返回搜索键的索引(如果它包含在数组中);否则,( - (插入点) - 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。
第二个响应起初可能看起来有些模糊,但是binarySearch假定您的数组已经开始排序(使用String
时按字典顺序排序),而您的数组不是。