Java Arrays.binary搜索即使在对数组排序时也会返回错误的数据
文档中写到“如果数组中的所有元素都小于指定的键,Arrays.binarySearch将返回a.length。”因此在下面的程序中,我希望打印值4,但它打印的是-4。为什么会有这种反常的行为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
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”。