2013-04-28 4 views
1

Итак, у меня есть генератор случайных чисел, где он генерирует 10 чисел между 1 и любыми входами пользователя в качестве максимума. Он работал хорошо, но я хочу сделать так, чтобы он не генерировал повторяющиеся числа. Таким образом, если он генерирует 5, ни один из других номеров не может быть равен 5.Создайте список уникальных случайных чисел

+0

Какой язык вы с помощью? –

+0

Прости, пропустил это. Обычно люди отмечают язык, а не включают его в заголовок. (Редактирует для него) –

+0

Одним из решений может быть использование Set вместо списка. Если он генерирует дубликат. set просто игнорирует его, и вы можете снова создать новый номер. Продолжайте это до тех пор, пока размер набора не достигнет предела, то есть 10 номеров в вашем случае. –

ответ

3

Вы можете попробовать отбор проб. Начните с пустого набора. Сгенерируйте число, если оно находится в наборе, повторите попытку. То есть продолжайте собирать, пока не найдете номер не в наборе. Как только вы найдете новый номер, добавьте его в набор, а затем верните его пользователю.

Конечно, если было создано большое количество чисел, скажем k, а верхняя граница равна n, тогда время для получения нового номера следует за геометрическим распределением (с вероятностью успеха (nk)/n), поэтому ожидаемое количество выборок, необходимых до того, как вы найдете уникальный номер, - n/(nk).

3

Если у вас есть небольшой максимум, вы можете использовать Collection.shuffle() список уникальных значений. Из этого вы можете выбрать 10 элементов.

+0

Максимальные значения всегда будут отличаться от программы, которую я делаю. Я мог бы быть где угодно от 5 до 50. А также, это на самом деле выбор случайных букв, я просто получаю его, чтобы получить символ строки в позиции случайного числа. – user2328462

+0

Диапазон должен быть таким же или больше, чем номер, который вы хотите выбрать. Вы не можете получить 10 уникальных значений с максимальным диапазоном менее 10. например. 5. –

0

Чтобы гарантировать, что номер не является дубликатом, храните найденные числа в Java SET, чтобы добавить только в том случае, если внутри него нет дубликата.

Алгоритм Построения для генерации случайных чисел может быть что-то вроде:

take the system time as your seed value 
use this to get the random numbers 
suppose user says number between 1-100 
so take system milliseconds%100 so time always changes so maximum probability that you get random numbers. 

Таким образом, всегда принимает значение семени мод (%) ваша верхняя граница в этом случае его 100.

0
int i = 0, r = 0; 
    boolean ch = true; 
    int[] list = new int[num]; 
    while (i < num) 
    { 
     r = rnd.nextInt(num); 
     ch = true; 
     for (int j = 0; j < i; j++) 
      if (r == list[j]) 
      { 
       ch = false; 
       break; 
      } 
     if (ch) 
     { 
      list[i] = r; 
      i++; 
     } 
    } 
+1

добавьте несколько моментов, поясняющих, что делает код и контрольные точки. – Phani

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