Java的.sort()方法打破了while循环

时间:2019-10-13 20:54:20

标签: java while-loop infinite-loop

最近开始学习Java,并在实施“二进制搜索”期间发现,如果我在要搜索的数组上调用Arrays.sort(),则会使循环无限长。删除/注释掉该行可以解决问题,但是我不知道为什么。我的目的是将排序后的数组传递给.binarySearch()方法。试图找出与调试器,但不能。不想让这个问题没有答案,有人可以帮忙吗?

import java.util.Arrays;

public class Main {

    static class BinarySearch {
        int binarySearch(int[] array, int value) {
            int low = 0;
            int high = array.length - 1;

            while (low <= high) {
                int mid = low + high / 2;
                int guess = array[mid];

                if (guess == value) {
                    return mid;
                } else if (guess > value) {
                    high = mid - 1;
                } else {
                    low = mid + 1;
                }
            }
            return -1;
        }
    }

    public static void main(String[] args) {
        BinarySearch bs = new BinarySearch();
        int[] a = {1, 3, 4, 45, 54, 666, 2, 4};
        Arrays.sort(a);

        int result = bs.binarySearch(a, 45);

        if (result == -1) {
            System.out.println("value not found");
        } else {
            System.out.println("value found at position: " + result);
        }
    }
}

1 个答案:

答案 0 :(得分:4)

Arrays.sort与您最终陷入无限循环并没有任何关系。这就是您计算中位数的方式。

应该是(low + high) / 2。您似乎忘了加括号。