在Java中,为什么使用二进制搜索时返回负数?

在Java中,为什么使用二进制搜索时返回负数?,java,arrays,search,sorting,binary,Java,Arrays,Search,Sorting,Binary,我是Java初学者,正在学习使用数组。我知道当使用数组的二进制搜索方法时,如果没有找到条目,它将返回一个负数。但是,在下面的代码中,9、10和11返回了一个负数 我想知道是否有人能帮我指出我做错了什么?谢谢 String [] oneToSixteen = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"}; System.out.println("Searc

我是Java初学者,正在学习使用数组。我知道当使用数组的二进制搜索方法时,如果没有找到条目,它将返回一个负数。但是,在下面的代码中,9、10和11返回了一个负数

我想知道是否有人能帮我指出我做错了什么?谢谢

   String [] oneToSixteen = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"};

   System.out.println("Searching for 7: "+ Arrays.binarySearch(oneToSixteen, "7"));
   System.out.println("Searching for 8: "+ Arrays.binarySearch(oneToSixteen, "8"));
   System.out.println("Searching for 9: "+ Arrays.binarySearch(oneToSixteen, "9"));
   System.out.println("Searching for 10: "+ Arrays.binarySearch(oneToSixteen, "10"));
   System.out.println("Searching for 11: "+ Arrays.binarySearch(oneToSixteen, "11"));
我得到的输出是:

Searching for 7: 6
Searching for 8: 7
Searching for 9: -17
Searching for 10: -2
Searching for 11: -2

任何帮助都将不胜感激。

这是因为您的数组是一个
字符串的数组,而不是
int
它没有排序

文档中明确指出,必须对正在搜索的数组进行排序,如果不是,则结果是未定义的


要对数组进行排序,您可以使用Arrays类的。负数指的是组件1,在该组件中,字符串将在数组中找到/插入,并且由于未对数组进行排序而出现。找不到该元素。 因此,对于您的阵列 “9”为-17,表示将插入组件16中 “10”将插入组件1中 “11”将插入组件1中

数组的类型无关紧要,因为数组方法已重载

使用排序

Arrays.sort(oneToSixteen);

然后使用binarySearch()

请记住,要使
数组正常工作,必须先对源数组进行排序。如果源数组未排序,则结果将是未定义的。根据您的问题,源数组未排序。要按自然顺序对数组进行排序,请使用util方法
Arrays.sort(array)
。您还可以提供额外的比较器来控制排序顺序
数组。排序(数组,比较器)

例如:

// sort in natural order (ascending)
Arrays.sort(oneToSixteen);

// sort descending using comparator
Arrays.sort(oneToSixteen, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return o2.compareTo(o1);
    }
});
//按自然顺序排序(升序)
Arrays.sort(onetosixten);
//使用比较器进行降序排序
sort(onetosixten,新的Comparator(){
@凌驾
公共整数比较(字符串o1、字符串o2){
返回o2.compareTo(o1);
}
});

字符串数组未排序(在这种情况下,binarySearch的返回值未定义)。“未排序”点是公平的-但您对数组类型发表评论的原因是什么?他正在通过
字符串
进行搜索,
字符串
可比的
@11684:array.sort可以做到这一点。。。当然,这会改变所有的结果。@GregKopff:我怀疑问题的关键是它们没有被排序,因为它们是字符串(根据字典顺序进行比较);与整数相同的值显然已经进行了适当排序。@11684:完全正确-这是这些字符串的字典顺序。@GregKopff:如果它本来是一个
int
数组,那么1,2,3,4,…12是隐式排序的。。nto用于
字符串
。对于字符串,使用ascii值进行排序。