java - 二分查找给出了错误的输出 Java

标签 java binary-search

我的代码有问题。我们正在研究二分搜索,每当我输入数字时,我似乎都无法获得正确的输出。我们得到了一个已经按顺序排列的 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;
    }
}

因此,如果数字不在列表中,则返回部分应该只返回-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));

关于java - 二分查找给出了错误的输出 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22467153/

相关文章:

java - Google NLP api 提供找不到 TLS ALPN 提供程序;没有可用的 netty-tcnative、Conscrypt 或 Jetty NPN/ALPN

python - 把python代码翻译成c代码有那么难吗?

c++ - 二进制搜索插入字符字符串。错误在哪里?

performance - 实现最速上升以优化概率

algorithm - 计算 HashMap 与二进制搜索的 O(n)

big-o - 递归函数的渐近复杂度是如何推导的

java - android中以不同格式显示具有一个字符串值的日期的问题

java - 无法解析 onActivityResult 方法

java - 存储和编辑 Java EE 应用程序的配置

Java字符串内字符串到字符串