我无法在数组中搜索用户输入的值。这个项目是关于从朋友那里赚钱并进行投资。该计划将跟踪这些投资。我使用数组分配每个朋友的投资。我导入了一个名为investments.txt的文件,这是编译此代码所必需的。
我的问题是二进制搜索本身。我知道我的数组是有效的,并且它是通过冒泡排序进行排序的。一切正常,因此没有问题,但是由于某种我不知道的原因,或者至少我看不到它,每次我在数组中搜索一个值(来自txt文件导入的有效值)时,它都会考虑“未找到!”。它不会向用户显示有效信息,我不确定为什么。
关于输出必须是什么样的示例:
您要搜索投资金额吗? (是/否)是
输入投资金额:10075.45
在第34位发现投资金额10075.45。
System.out.println("Would you like to search for an investment amount? (Y/N)");
String answer= in.nextLine();//Prompt the user for binary search
while (answer.equalsIgnoreCase("Y")) {
System.out.println("Enter the investment amount");
double userSrc = in.nextDouble();
int n = 0;
int first = 0;
int last = n - 1;
int middle = (first+last)/2;
while (first <= last) {
if (fileArray[middle] < userSrc)
first = middle + 1;
else if (fileArray[middle] == userSrc) {
System.out.printf("%f found at location %d.\n", userSrc, middle+1);
return;
}
else
last = middle - 1;
middle = (first + last)/2;
}
if (first > last)
System.out.printf("Not found! %f isn't present in the list.\n", userSrc);
return;
}
}
答案 0 :(得分:1)
感谢您提供简化的代码。您创建的示例缺少一些要及时添加以进行编译的内容。
您以前包含的修改
double[] fileArray = {"5", "100", "146.15", "314.56", "600.92"};
这还不错,所以需要测试数据。这不需要从问题中删除,它需要删除值周围的引号,以便可以将它们视为适当的双精度数。考虑到这一点,您似乎意外地初始化了int n = 0
而不是int n = fileArray.length
。这似乎是程序的两次编辑都存在的问题。请记住,当涉及这种排序方法时,n应该是您存储在数组中的元素的数量,因此将其设置为0会导致所有其他值被错误地初始化,并将其视为存在0个元素。数组。这是我的更正代码:
import java.util.*;
public class binarysearch{
public static void main(String []args){
double[] fileArray = {5, 100, 146.15, 314.56, 600.92};
Scanner in = new Scanner(System.in);
System.out.println("Would you like to search for an investment amount? (Y/N)");
String answer= in.nextLine();//Prompt the user for binary search
while (answer.equalsIgnoreCase("Y")) {
System.out.println("Enter the investment amount");
double userSrc = in.nextDouble();
int n = fileArray.length;
int first = 0;
int last = n - 1;
int middle = (first+last)/2;
while (first <= last) {
if (fileArray[middle] < userSrc)
first = middle + 1;
else if (fileArray[middle] == userSrc) {
System.out.printf("%f found at location %d.\n", userSrc, middle+1);
//return;
break;
}
else
last = middle - 1;
middle = (first + last)/2;
}
if (first > last)
System.out.printf("Not found! %f isn't present in the list.\n", userSrc);
//return;
System.out.println("Would you like to search for an investment amount? (Y/N)");
answer= in.nextLine();
}
}
}
Y 146.15
的输出:
Would you like to search for an investment amount? (Y/N)
Enter the investment amount
146.150000 found at location 3.
最后,请注意您的程序在找到一个值后返回。该返回值仍在main中,因此退出程序。这将导致提示用户永远不要到达任何地方的循环。我将其替换为break;
以仅退出循环并在循环末尾完全删除该循环。您可能要注意的nextDouble
呼叫中可能还会挂起换行符。我会把它留给你玩。甚至可以尝试使用146.150000000001
之类的输入。