我的代码出了问题。我们正在进行二进制搜索,每当我输入一个数字时,我似乎无法获得正确的输出。我们已经按顺序(外部文件)给出了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。一切都在编译,所以我不确定我错过了什么,或者是否真的很明显我忘记了。有人可以帮我识别错误吗?非常感谢任何指导/反馈。
答案 0 :(得分:2)
移动调用以在填充数组后将binarySearch
的输出打印到:
int[] num = new int[60];
int i = 0;
while(kbReader.hasNextInt())
{
num[i++] = kbReader.nextInt();
}
System.out.println(binarySearch(num, search));