Arrays 二进制搜索排序数组中不存在的数字,返回大于-1的负数
当搜索编号为12时,为什么返回-6而不是-1Arrays 二进制搜索排序数组中不存在的数字,返回大于-1的负数,arrays,Arrays,当搜索编号为12时,为什么返回-6而不是-1 int[]list={2,4,7,10,11,45,50,59,60,66,69,70,79}; System.out.println(“1.Index是”+Arrays.binarySearch(list,11)); System.out.println(“2.Index是”+Arrays.binarySearch(list,12)); 结果: 1.指数是4 2.指数为-6 使现代化 现在我明白了,因为 Arrays.binarySearch将
int[]list={2,4,7,10,11,45,50,59,60,66,69,70,79};
System.out.println(“1.Index是”+Arrays.binarySearch(list,11));
System.out.println(“2.Index是”+Arrays.binarySearch(list,12));
结果:
1.指数是4
2.指数为-6
使现代化
现在我明白了,因为
Arrays.binarySearch将返回
((插入点)-1)
如果数字不在数组中。
即
12在插入5时,因此返回(-(5)-1)=-6。
谢谢你的帮助。摘自
返回值:
此方法返回搜索键的索引(如果它包含在数组中),否则返回(-(插入点)-1)。插入点是将键插入数组的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定键,则为.length
从返回值解释中,它返回元素在数组中的位置(即-5)减去1,即-6。您可以参考Javadoc: 它返回:
,如果它包含在数组中李>搜索键的索引
- 否则:(
)李>-(插入点)-1
此处插入点为:
int[] list = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79};
// 1^ 2^ 3^ 4^ 5^
位置
5
so(-5-1)=-6
这是BinarySearch()
方法的常见返回类型。
如果要打印整数a的索引
:
int[] list = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79};
int a =12; //Value can be updated or read through Scanner
int temp = Arrays.binarySearch(list,a);
if(temp>=0){
System.out.println("Index of a is : " + temp)
}else{
System.out.println("Insertion point for a is : " + (-1)*(temp+1);
}
,即阅读。