文档写道:“如果数组中的所有元素都小于指定的键,则Arrays.binarySearch返回a.length”。所以在下面的程序中,我期望打印值4,但它打印-4。为什么会出现这种异常行为?
import java.io.*;
import java.math.*;
import java.util.*;
import java.lang.*;
public class Main{
public static void main(String[] args)throws java.lang.Exception{
int[] a = new int[3];
a[0] = 3;
a[1] = 8;
a[2] = 9;
System.out.println(Arrays.binarySearch(a, 15));
}
}
答案 0 :(得分:8)
引自Java Docs ..
返回:搜索键的索引(如果它包含在数组中);除此以外, ( - (插入点) - 1)。
插入点是
定义为将密钥插入的位置 array:第一个元素的索引大于键,或者 a.length如果数组中的所有元素都小于指定的键
在您的示例中,所有元素都小于15
,数组的长度为3
。因此插入点为3
,因此binarySearch返回-3-1 = -4
。
答案 1 :(得分:0)
如果它返回负值,则找不到:
http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html
public static int binarySearch(Object [] a, 对象键)
返回:搜索键的索引(如果它包含在数组中);否则,( - (插入点) - 1)。插入点定义为键将插入到数组中的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定键,则为a.length。请注意,当且仅当找到密钥时,这可以保证返回值>> =。