2013-04-09 2 views
1

Я пытаюсь получить случайные числа 0 - 499 в наборах 2 на основе того, что вводит пользователь. Например, 234 и 58, и каждый из них задан, но пользователь может запросить, что они имеют 8 наборов. Im пытаясь убедиться, что избыточный номер не показывает вверх, как 234 & 58, 12 & 444, 198 & 58. (58 показали дважды.)предотвращение избыточных случайных чисел

Путь им пытаются предотвратить это, помещая найденные номера в массив, и когда я иду вокруг следующего совпадения, я проверяю массив, чтобы убедиться, что они еще не использовались. Было просто интересно, каким будет лучший способ этого. Как очевидно, с первого раза, ни один номер не был выбран, поэтому мне не нужно проверять. но тогда следующий пойдет вокруг, если я получу избыток? я буду получать числа, а затем проверить массив, и если он уже находится в массиве, как мне вернуться и получить новые числа? Может быть, цикл while?

вот что им делать:

//now add the specified number of random connections 
    System.out.println(); 
    System.out.println("new connection(s): "); 

    //array for keeping track of the new connections to prevent redundant add's 
    int redundant [] = new int[con*2]; 

    for(int i = 1; i <= con; i++){ 
     Random ran = new Random(); 
     if(i == 1){ 
      int ran1 = ran.nextInt(sWorld.length-1) + 1; 
      int ran2 = ran.nextInt(sWorld.length-1) + 1; 
      redundant[i - 1] = ran1; 
      redundant[i] = ran2; 
      System.out.println("  " + ran1 + " - " + ran2); 
     } 
     else{ 
      int ran1 = ran.nextInt(sWorld.length-1) + 1; 
      int ran2 = ran.nextInt(sWorld.length-1) + 1; 
      //need help 
     } 

спасибо заранее!

EDIT. Идущий с maethod ниже (с использованием коллекций)

 List<Integer> nums = new LinkedList<Integer>(); 
    for(int i = 0; i <= 499; i++){ 
     nums.add(i); 
    } 

    //shuffle the collection for more randomness 


    System.out.println(); 
    System.out.println("new connection(s): "); 
    for (int x = 1; x <= con; x++){ 
     Collections.shuffle(nums); 

     Random ran = new Random(); 
     int r1 = nums.remove(ran.nextInt(nums)); 
     int r2 = nums.remove(ran.nextInt(nums)); 

, но возникли проблемы с получением случайных чисел, любая помощь?

+0

Произвольно сгенерируйте одно число, x, затем выведите x, x + 1, x + 2, ..., x + n% 500. Все еще отлично rando м! –

+0

Нет, это случайный случай, но он не является совершенно случайным, потому что у вас есть шаблон, основанный на модульных классах 500. Шаблон не случайный вообще. Вы не можете генерировать любой возможный сценарий, используя этот шаблон, который не соответствует вашему шаблону (очевидно). Кроме того, ваше описание неверно, так как x может быть 499, а x + 1 - 500, это должно было бы иметь (x + 1)% 500, но шаблон по-прежнему не является случайным. –

+0

http://en.m.wikipedia.org/wiki/Tongue-in-cheek –

ответ

1

Одним из способов является создание списка из числа 0-499

List<Integer> nums = new LinkedList<Integer>(); 
for(int i=0; i<=499; i++) nums.add(i); 

Затем перетасовать список по

Collections.shuffle(nums); 

Тогда каждый раз, когда вам нужно единовременное случайное число между 0- 499, просто удалите элемент из списка

int x = nums.remove() 
+0

спасибо, что я действительно попробую ваш метод, но с проблемой получения случайного номера. это то, что im doin и не работает (см. отредактированную часть) – erp

+0

просто добавил .size() после nums, так что теперь у меня есть int r1 = nums.remove (ran.nextInt (nums.size())); потому что im using Random ran = new Random(); он работает так, спасибо! – erp

+0

После того, как вы выполнили команду «Collections.shuffle (nums)», список перетасован, поэтому даже если вы всегда удаляете первый, вы получите случайное число – gerrytan

3

Просто заполните коллекцию со всеми индексами в требуемом диапазоне (то есть от 0 до 499), а затем используйте Collections.shuffle().

0

Используйте цикл while и используйте array. Пока ваш индекс не выходит за пределы области, генерируйте два числа. Добавьте их в массив, если они не являются избыточными и соответственно увеличивают ваш индекс. Если они избыточны, ничего не делайте, следующая итерация цикла while будет генерировать два новых номера.

+0

Да, я думаю, это то, что я ищу, дайте мне попробовать это быстро! Я просто не мог визуализировать его: p – erp

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