一个简单的问题,我只是想知道为什么当key = 12时,返回-6?我知道12不在数组中,但为什么它是6? 我想要一个详细的解释。 我知道low = 0; 如果未找到,则返回-low -1;但我不明白为什么。
int[] list = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79};
System.out.println("1. Index is " + Arrays.binarySearch(list, 11));
System.out.println("2. Index is " + Arrays.binarySearch(list, 12));
打印:
1. Index is 4
2. Index is -6
答案 0 :(得分:1)
返回值:
此方法返回搜索关键字的索引,如果它包含在数组中,则返回( - (插入点) - 1)。插入点是键插入数组的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定键,则为a.length。 < / p>
从返回值解释中,它返回元素在数组中的位置的否定(即-5)减去1,即-6。
答案 1 :(得分:1)
您可以参考Javadoc:Arrays.binarySearch(int[] a,int key)
它返回:
index of the search key
,如果它包含在数组中; -(insertion point) - 1
)。 这里的插入点是:
int[] list = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79};
// 1^ 2^ 3^ 4^ 5^
位置5
所以(-5-1) = -6
答案 2 :(得分:0)
这是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);
}