Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当目标==列表[mid]时,二进制搜索在while循环的第一次迭代中不返回true_Java_Arrays_Element_Binary Search - Fatal编程技术网

Java 当目标==列表[mid]时,二进制搜索在while循环的第一次迭代中不返回true

Java 当目标==列表[mid]时,二进制搜索在while循环的第一次迭代中不返回true,java,arrays,element,binary-search,Java,Arrays,Element,Binary Search,我认为我是二进制搜索的专家,因为我可以做线性搜索、递归搜索和迭代搜索,但我甚至不能在java中使用它 因此,如果我将目标变量设置为等于中点,if语句将跳过该点,然后转到else if public static void main(String[] args) { int[] list = { 11, 22, 33, 44, 55, 66, 77, 88, 99 }; int target = 44; System.out.print(Binary

我认为我是二进制搜索的专家,因为我可以做线性搜索、递归搜索和迭代搜索,但我甚至不能在java中使用它

因此,如果我将目标变量设置为等于中点,if语句将跳过该点,然后转到else if

public static void main(String[] args) {
        int[] list = { 11, 22, 33, 44, 55, 66, 77, 88, 99 };
        int target = 44;
        System.out.print(BinarySearchIterarive(list, target));

    }

    public static boolean BinarySearchIterarive(int[] list, int target) {
        int high = list.length - 1;
        int low = 0;
        while (low <= high) {
            int mid = (low + high) / 2;
            if (target == list[mid]) {
                      return true;
            } else if (target < list[mid]) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }

        }
        return false;
    }
}


当list[mid]为44时,让我们在这里进行简单的跟踪

11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 | 99

Target: 44
第一步:
high=8,low=0

low <= high
low <= high
第二步:
high=3
low=0

low <= high
low <= high
因此,
low=2
high=3

第三步:
high=3
low=2

同样,
low vs studio debugger它在执行if语句后不会返回true,否则如果数组是基于零的,则正确的索引是
3
无法复制:对我来说,代码按预期工作。
Target > list[mid]
Target > list[mid]
low == high
Target = list[mid]
returns true