Java 整数数组中的搜索

Java 整数数组中的搜索,java,arrays,binary-search,Java,Arrays,Binary Search,我试图使用数组来搜索int数组中的值。binarySearch(),我知道如果在数组中找到值,该方法将返回值的索引号,如果数组不包含值,该方法将返回负数 这是我的阵列: int[] searchInArray=new int[6]; searchInArray = new int[]{2,3,4,22,1,2}; 这是我的代码: int result1=Arrays.binarySearch(searchInArray,55); int result2=Arrays.binarySearch(

我试图使用数组
来搜索int数组中的值。binarySearch()
,我知道如果在数组中找到值,该方法将返回值的索引号,如果数组不包含值,该方法将返回负数

这是我的阵列:

int[] searchInArray=new int[6];
searchInArray = new int[]{2,3,4,22,1,2};
这是我的代码:

int result1=Arrays.binarySearch(searchInArray,55);
int result2=Arrays.binarySearch(searchInArray, 22);
当我运行这段代码时,我得到return1=-7和return2=-7

然后我试着找到1而不是22,结果2是“-1”


哪里出错了?

使用
binarySearch()
的先决条件是必须对数组进行排序。你的不是

引自:

使用二进制搜索算法在指定的整数数组中搜索指定的值在进行此调用之前,必须对数组进行排序(如通过sort(int[])方法)。如果未排序,则结果未定义。如果数组包含多个具有指定值的元素,则无法保证将找到哪个元素


(emphasis mine)

在尝试使用二进制搜索之前,需要确保数组已排序。以下代码应按预期工作:

    int[] searchInArray = new int[6];
    searchInArray = new int[] { 2, 3, 4, 22, 1, 2 };

    Arrays.sort(searchInArray);
    final int result1 = Arrays.binarySearch(searchInArray, 55);
    final int result2 = Arrays.binarySearch(searchInArray, 22);

    System.out.println("result1 " + result1);
    System.out.println("result2 " + result2);
另外,您不应该期望返回-1<代码>数组。binarySearch返回一个负数,以指示值应插入的位置。从:

搜索键的索引(如果它包含在数组中);否则,((插入点)-1)。插入点定义为将键插入数组的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定键,则为a.length。注意,这保证了当且仅当找到键时,返回值将>=0


那么,你期待什么呢?