2014-12-02 117 views
-1

陣列編寫範圍內創建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!"); 
    } 
} 
+1

請仔細閱讀本:http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – 2014-12-02 00:40:59

回答

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的概率 - (5000分之4999)^ 1000這是隻有18左右%這就是爲什麼你會經常得到「值沒有找到」消息