Java 在数组中搜索给定的数字

Java 在数组中搜索给定的数字,java,arrays,Java,Arrays,编写一个程序,创建一个1000个随机数的数组,范围为1–5000。然后向用户请求一个 值介于和5000之间,并搜索数组,直到找到该值或确定该值为 不在数组中。打印一条消息,指示是否找到该值,以及需要输入多少个数字 在找到值(或确定它不在那里)之前必须查看 出于某种原因,无论我的输入是什么,我总是得到“找不到值”。我不知道我做错了什么。如有任何建议,将不胜感激。先谢谢你 import java.util.*; public class Array { int y = 5000;

编写一个程序,创建一个1000个随机数的数组,范围为1–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!"); 
    } 
}
import java.util.*;
公共类数组
{ 
int y=5000;
int x;
整数值[]=新整数值[1000];
数组()
{ 
随机rg=新随机();
对于(int x=0;x值[(r+s)/2])
s=(r+s)/2+1;
其他的
r=(r+s)/2-1;
如果(s>r)
返回-1;
} 
} 
公共静态void main(字符串[]args)
{ 
数组fN=新数组();
扫描仪kb=新扫描仪(System.in);
System.out.println(“输入1到5000之间的整数”);
int a=kb.nextInt();
如果(fN.findNumber(a)>0)
System.out.println(“在”+fN.findNumber(a)+“tries”中找到);
其他的
System.out.println(“未找到值!”);
} 
}

这不会帮助您进行全面调试,只是给您一些提示:

首先,可能与您的问题关系不大,但仍然值得一看:通过
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);
Random rg=new Random();
对于(int x=0;x),请阅读以下内容: