3

文档写道:“如果数组中的所有元素都小于指定的键,则 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));         
    }
}
4

2 回答 2

8

引用Java Docs ..

返回: 搜索键的索引,如果它包含在数组中;否则,(-(插入点)- 1)。

插入点在哪里

定义为将键插入数组的点:大于键的第一个元素的索引,如果数组中的所有元素都小于指定的键,则为 a.length

在您的示例中,所有元素都小于15并且数组的长度为3. 所以插入点是3,因此 binarySearch 返回-3-1 = -4

于 2013-10-13T06:28:27.067 回答
0

如果它返回负值,则找不到:

http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html

public static int binarySearch(Object[] a, Object key)

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

于 2013-10-13T06:32:15.693 回答