在数组中搜索给定的数字

时间:2014-12-02 00:39:14

标签: java arrays

编写一个程序,创建一个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!"); 
    } 
}

1 个答案:

答案 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;消息