我是Java的初学者,正在学习使用数组。据我所知,当使用Array的二进制搜索方法时,如果找不到该条目,它将返回一个负数。但是,在下面的代码中,我得到了一个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
非常感谢任何帮助。
答案 0 :(得分:9)
答案 1 :(得分:0)
否定引用组件-1,其中String将被发现/插入到您的数组中,并且因为您的数组未被排序而出现。找不到该元素。 所以对你的阵列 “9”是-17它将被插入到组件16中 “10”将插入组件1中 “11”将插入组件1
数组类型无关紧要,因为Arrays方法已经过载。
按使用
排序Arrays.sort(oneToSixteen);
然后使用你的binarySearch()
答案 2 :(得分:0)
请注意,要使Array.binarySearch(array, key)
方法正常工作,必须先对源数组进行排序。如果未对源数组进行排序,则结果将是未定义的。根据您的问题,源数组未排序。要按自然顺序对数组进行排序,请使用util方法Arrays.sort(array)
。您还可以提供额外的比较器来控制排序顺序Arrays.sort(array, comparator)
。
示例:
// 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);
}
});