Бинарный поиск дает неверный вывод Java

1

У меня проблема с моим кодом. Мы работаем над бинарным поиском, и я не могу получить правильный вывод всякий раз, когда я вводил номер. Нам был предоставлен список из 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. Все компилируется, поэтому я не совсем уверен, чего не хватает, или если это действительно очевидно, что я забываю. Может ли кто-нибудь помочь мне определить ошибку? Любое руководство/обратная связь очень приветствуются.

Теги:
binary-search

1 ответ

2

Переместите вызов, чтобы распечатать вывод binarySearch после заполнения массива:

int[] num = new int[60];
int i = 0;
while(kbReader.hasNextInt())
{
    num[i++] = kbReader.nextInt();
}
System.out.println(binarySearch(num, search));
  • 0
    Я бы сделал это, только если вы хотите замедлить путь. Если в массиве ничего нет, поиск выполняется быстрее.
  • 2
    @CrazyDart За исключением того, что это не «пустой массив»; это массив из 60 значений по умолчанию (которые должны быть нулями). Так будет ли он на самом деле быстрее?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню