Java Arrays.binarySearch 找不到第一个值



我需要检查一个int[]是否包含某个值。 数组将始终被排序。

我找到了一个足够简单的方法,但我无法让它正常工作。

当我这样做时:

int[] numbers=new int[] {6,8,15,16,18,19,25,26,28,29,32};
for(int i=0;i<40;i++) {     
int a= (Arrays.binarySearch(numbers, i));
if (a>0)
{
System.out.println("Found: "+i);
}   
}

输出为:

Found: 8
Found: 15
Found: 16
Found: 18
Found: 19
Found: 25
Found: 26
Found: 28
Found: 29
Found: 32

如果我在数组的开头添加一个零,那么它会找到 6(但不是零(。

为什么从未找到数组中的第一个条目?

0 = 第一个位置。比如,'是的,我找到了你的物品;它位于阵列的最前面。

负数表示:未找到(如果删除符号并减去 1,则您拥有必须插入它以保持数组排序的位置(。您正在检查"大于 0";您应该检查"大于 -1"。

它应该是"if (a>-1("。如果 Arrays.binarySearch 找到该数字,则返回数组中搜索键的索引;否则,它将返回一个 -1 或更小的数字。请参阅此链接。

相关内容

最新更新