gpt4 book ai didi

java - 通过二分搜索查找数组中的位置时遇到问题

转载 作者:行者123 更新时间:2023-12-02 09:58:22 25 4
gpt4 key购买 nike

我在数组中搜索用户输入的值时遇到问题。这个项目是关于从你的 friend 那里拿钱并进行投资。该计划旨在跟踪这些投资。我使用一个数组来分配每个 friend 的投资。我导入了一个名为 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;
}
}

最佳答案

感谢您提供简化的代码。您制作的示例缺少一些内容,我立即添加了一些内容以使其编译。

您在过去的编辑中包含

double[] fileArray = {"5", "100", "146.15", "314.56", "600.92"};

这还不错,需要测试数据。这不需要从问题中删除,它需要删除值周围的引号,以便它们可以被视为正确的 double 。考虑到这一点,您似乎不小心初始化了 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 这样的输入。

关于java - 通过二分搜索查找数组中的位置时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55815633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com