我需要检查一个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 或更小的数字。请参阅此链接。