Java';s.sort()方法中断while循环
最近开始学习Java,在实现“二进制搜索”的过程中发现,如果我调用我要搜索的数组上的array.sort(),它会使循环无限大。删除/注释该行可以解决问题,但我不知道原因。我的目的是将排序后的数组传递给.binarySearch()方法。试图使用调试器解决问题,但未能解决。我不想让这个问题没有答案,任何人都能帮忙吗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
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对我来说已经足够了:)非常感谢!!