Arrays 二进制搜索排序数组中不存在的数字,返回大于-1的负数

Arrays 二进制搜索排序数组中不存在的数字,返回大于-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将

当搜索编号为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将返回

((插入点)-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);
}
,即阅读。