2014-12-02 5 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/ –

ответ

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 %. Вот почему вы часто можете получить сообщение «значение не найдено»

Смежные вопросы