二进制搜索给出不正确的Java输出

二进制搜索给出不正确的Java输出,java,binary-search,Java,Binary Search,我的代码有问题。我们正在进行二进制搜索,而我似乎无法在输入数字时获得正确的输出。我们得到了一个60个数字的列表(外部文件),无论我们输入什么数字,程序都应该搜索并返回位置。如果该数字不在列表中,则应返回-1 我的代码: import java.io.*; import java.util.*; public class Prog489 { public static void main(String[] args) throws IOException { Sca

我的代码有问题。我们正在进行二进制搜索,而我似乎无法在输入数字时获得正确的输出。我们得到了一个60个数字的列表(外部文件),无论我们输入什么数字,程序都应该搜索并返回位置。如果该数字不在列表中,则应返回-1

我的代码:

import java.io.*;
import java.util.*;
public class Prog489
{
    public static void main(String[] args) throws IOException
    {
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter a number to search for: ");
        int search = scan.nextInt();
        Scanner kbReader = new Scanner(new File("C:\\Users\\Guest\\Documents\\java programs\\Prog489\\Prog489.in"));
        int[] num = new int[60];
        int i = 0;
        System.out.println(binarySearch(num, search));
        while(kbReader.hasNextInt())
        {
            num[i++] = kbReader.nextInt();
        }
    }

    private static int binarySearch(int[] num, int search)
    {
        int lb = 0;
        int ub = num.length - 1;
        while(lb<=ub)
        {
            int mid = (lb+ub)/2;
            if(num[mid] == search)
            {
                return mid;
            }
            else if(search>num[mid])
            {
                lb=mid+1;
            }
            else
            {
                ub = mid-1;
            }
        }
        return -1;
    }
}
import java.io.*;
导入java.util.*;
公共类Prog489
{
公共静态void main(字符串[]args)引发IOException
{
扫描仪扫描=新扫描仪(System.in);
System.out.print(“输入要搜索的数字:”);
int search=scan.nextInt();
Scanner kbReader=new Scanner(新文件(“C:\\Users\\Guest\\Documents\\java程序\\Prog489\\Prog489.in”);
int[]num=新的int[60];
int i=0;
System.out.println(二进制搜索(num,search));
while(kbReader.hasNextInt())
{
num[i++]=kbReader.nextInt();
}
}
私有静态int二进制搜索(int[]num,int搜索)
{
int-lb=0;
int ub=num.length-1;
while(lbnum[mid])
{
lb=中间+1;
}
其他的
{
ub=mid-1;
}
}
返回-1;
}
}

因此,如果数字不在列表中,则带有返回的部分只应返回-1。但每当我在列表中输入一个数字(例如60),它仍然返回-1。所有的东西都在编译,所以我不确定我遗漏了什么,或者我是否真的忘记了什么。有人能帮我找出错误吗?非常感谢您的指导/反馈。

在填充数组后,将打印
binarySearch
输出的调用移动到

int[] num = new int[60];
int i = 0;
while(kbReader.hasNextInt())
{
    num[i++] = kbReader.nextInt();
}
System.out.println(binarySearch(num, search));

识别错误的最简单方法是使用调试器。第一次调用
binarySearch
时,使用一个填充了零的数字数组调用它。。。这不是您想要的,是吗?在阅读输入后,请将您的
System.out.println(binarySearch(num,search))
放入。感谢所有人的回复。我意识到这是我的粗心错误。再次感谢@SotiriosDelimanolis调试器不是万能的。这完全取决于你可以使用什么工具。如果您没有一个好的用户界面来使用调试器,那么使用一些
println
s来查看发生了什么可能会更容易。即使有调试器可供使用,我也经常喜欢这种方法,因为我使用过的调试器在代码运行时往往不可靠或令人困惑(比如调试器在意外的时间以不同的状态暂停,让我在没有调试器的情况下认为出了问题).我只有在你想慢下来的时候才会这么做。如果数组中没有任何内容,搜索速度会更快。@CrazyDart,除非它不是“空数组”;它是一个由60个默认值(应该是零)组成的数组。那么它真的会跑得更快吗?