编写一个程序,创建一个1000个随机数的数组,范围为1 - 5000.然后询问用户a 介于5000和5000之间的值,并搜索数组,直到找到该值或确定该值为止 不在数组中。打印一条消息,指示是否找到了值,以及您输入了多少个数字 在你找到价值之前必须先看一下(或确定它不存在)。
出于某种原因,我一直得到"没有找到价值"什么时候不管我的意见。我无法弄清楚我做错了什么。任何建议将不胜感激。提前谢谢。
import java.util.*;
public class Array
{
int y = 5000;
int x;
int values[] = new int[1000];
Array()
{
Random rg = new Random();
for (int x=0;x<values.length;x++)
values[x]=rg.nextInt(y+1);
Arrays.sort(values);
}
public int findNumber(int val)
{
int s=0, r = values.length;
int x=0;
while(true)
{
x++;
if (values[(r+s)/2]==val)
return x;
else if (val > values[(r+s)/2])
s = (r+s)/2 + 1;
else
r = (r+s)/2 - 1;
if (s>r)
return -1;
}
}
public static void main(String[] args)
{
Array fN = new Array();
Scanner kb = new Scanner(System.in);
System.out.println("Enter whole between 1 and 5000.");
int a = kb.nextInt();
if (fN.findNumber(a)>0)
System.out.println("Found in " + fN.findNumber(a) + " tries.");
else
System.out.println("Value not found!");
}
}
答案 0 :(得分:0)
不会帮助您完全调试,只是为您提供一些提示:
首先,可能与您的问题没有密切关系,但仍值得关注:rg.nextInt(y + 1)
生成将从0到5001随机给您,我相信您需要rg.nextInt(y) + 1
。
我在修复上一个小问题后尝试了您的代码。它对我有用。我没有看到任何问题。但是,我怀疑的是,因为你正在生成1000个可以复制的随机数,如果你只是输入任何数字进行搜索,它可能不属于你生成的1000个数字。我稍微更新了您的代码,以便您可以查看生成的内容,并使用其中一个结果作为搜索输入。它应该工作:
Random rg = new Random();
for (int x=0;x<values.length;x++) {
int r = rg.nextInt(y) + 1;
System.out.println("Random number: " + r);
values[x]=r;
}
Arrays.sort(values);
(仅为了您的兴趣,您输入先前生成的1000个随机数中的数字的概率大约是1 - (4999/5000)^ 1000,这只是大约18%。这就是为什么您可能经常得到&#34;未找到值&#34;消息