二进制搜索算法不返回变量

Binary search algorithm isn't returning variable

我对二进制搜索很陌生,我尝试了一个代码,该代码将从文档中读取值,然后用户可以输入一个数字来从文档中搜索,通过二进制搜索,可以找到该数字.我现在遇到了麻烦,因为我在代码的二进制搜索部分初始化的“低”变量没有返回到我的主代码,并且有一个错误提示“低不能解析为变量”。

这是我的二进制搜索代码:

static public int search (int[]numbers,int target, int count)
{
    int high = numbers.length;
    int low = -1;
    int middle = (high+low)/2;
    
    while(high-low>1)
    {
        count++;
        middle = (high+low)/2;
        if(numbers[middle]>target)
        {
            high = middle;
        }
        else if(numbers[middle]<target)
        {
            low = middle;
        }
        else
        {
            break;
        }
        System.out.println(numbers[middle]);
        System.out.println(middle);
    }
        if(low == -1 || numbers[low]!=target)
        {
            low=-1;
            return low;
            
        }
        else
        {
            return low;
        }
        
        
}

这是我的主要代码中的代码。带有 if 语句的部分是出现错误的地方:

public static void main(String[] args) throws IOException {
    DataInputStream input = new DataInputStream(System.in);
    int [] numbers = new int [50000];
    int target;
    int count=0;
    
    try
    {
        BufferedReader br = new BufferedReader(new FileReader("randNums.txt")); 
        for(int i=0;i<50000;i++)
        {
            numbers[i]=Integer.parseInt(br.readLine());
        }
        br.close();
        
        Arrays.sort(numbers);
        
        System.out.print("Choose a number between 1-100000000 to search for: ");
        target = Integer.parseInt(input.readLine());
        
        search(numbers, target,count);
        
        if(low==-1)
        {
            System.out.println("The number was not on the list.");
        }
        else
        {
            System.out.println("The number is at position " + low);
            System.out.println("It took " + count + " comparisons to find the number.");
        }
        
        
        
    }

您必须在 main:
中初始化 low int low=search(numbers, target,count);

我已经解决了这个算法。

试试我的代码:

public static int guessNumber(int number) {
        int first = 0;
        int last = 1_000_000;
        if (verify(first) == 0) {
            count++;
            return first;                        
        }
        if (verify(last) == 0) {
            count++;
            return last;
        }
        
        while (last > first && count <= 50) {
            count += 1;
            // get the middle of the range
            int middle = (first + last) / 2;
            
            if (verify(middle) == 0) {
                return middle;
            }
            if (verify(middle) == 1) {
                first = middle + 1;
                if (verify(first) == 0) {
                    return first;
                }
            }else {
                last = middle - 1;
                if (verify(last) == 0)
                    return last;
            }
        }
        return 0;
    }

    //Function verify(integer) => integer
    public static int verify(int guess){
        if (numberTobeGuessed > guess ) {
            return 1;
        }else if (numberTobeGuessed < guess) {
            return -1;
        }
        return 0;
    }

我最近为像我这样懒惰的人找到了一个解决方案,使用下面的代码

int position = Arrays.binarySearch(numbers , target);

这里不用排序,数组变量number整型变量target.