Java Arrays.binary搜索即使在对数组排序时也会返回错误的数据

Java Arrays.binary搜索即使在对数组排序时也会返回错误的数据,java,Java,文档中写到“如果数组中的所有元素都小于指定的键,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.l

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

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

插入点所在的位置

定义为将密钥插入到 数组:大于键的第一个元素的索引,或 a、 如果数组中的所有元素都小于指定的键,则为长度


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

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

公共静态int二进制搜索(对象[]a, 对象键)


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

对于此类问题,答案总是在文档中。@Marounnaroun公平地说,这一次的问题是海报误读了文档,而不是完全不看。@DennisMeng现在我感觉很糟糕:(它根本没有这么说。请再读一遍。它没有说“返回a.length”。