У меня проблема с моим кодом. Мы работаем над бинарным поиском, и я не могу получить правильный вывод всякий раз, когда я вводил номер. Нам был предоставлен список из 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));