Java';s.sort()方法中断while循环

Java';s.sort()方法中断while循环,java,while-loop,infinite-loop,Java,While Loop,Infinite Loop,最近开始学习Java,在实现“二进制搜索”的过程中发现,如果我调用我要搜索的数组上的array.sort(),它会使循环无限大。删除/注释该行可以解决问题,但我不知道原因。我的目的是将排序后的数组传递给.binarySearch()方法。试图使用调试器解决问题,但未能解决。我不想让这个问题没有答案,任何人都能帮忙吗 import java.util.Arrays; public class Main { static class BinarySearch { int

最近开始学习Java,在实现“二进制搜索”的过程中发现,如果我调用我要搜索的数组上的array.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);
        }
    }
}
导入java.util.array;
公共班机{
静态类二进制搜索{
int二进制搜索(int[]数组,int值){
int低=0;
int高=数组长度-1;
while(低值){
高=中-1;
}否则{
低=中+1;
}
}
返回-1;
}
}
公共静态void main(字符串[]args){
BinarySearch bs=新的BinarySearch();
int[]a={1,3,4,45,54,666,2,4};
数组。排序(a);
int result=bs.binarySearch(a,45);
如果(结果==-1){
System.out.println(“未找到值”);
}否则{
System.out.println(“在位置找到的值:+结果”);
}
}
}

Arrays.sort实际上与最终得到无限循环无关。这是你计算中间值的方法


应该是
(低+高)/2
。您似乎忘了添加括号。

array.sort与您最终得到的无限循环没有任何关系。这是你计算中间值的方法


应该是
(低+高)/2
。你好像忘了加括号。

真的!看来今天的Java对我来说已经足够了:)非常感谢!!的确看来今天的Java对我来说已经足够了:)非常感谢!!