Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

рандомизация чисел Java

299  
Victoria_tag гость04.05.11 21:51
Victoria_tag
04.05.11 21:51 
Добрый вечер,
подскажите пожалуйста как в java при помощи random генератора сгенерировать числа от 1 до 84 480 раз, причем промежуток между повторениями одного и того же числа должен составлять не менее 10 (например: 1 3 5 4 2 6 9 8 7 10 11 12 1 13 5 3 4 6 и тд).
Вот код, который у меня есть:
В ответ на:
import java.util.Random;
import java.util.Date;
public class Main {
public Main() {
}
public static void main(String[] args)
{
//Создаем генератор случайных чисел.
for (int i=1; i<=480; i++) {
Random generator = new Random();
int k = 1+generator.nextInt(84);
System.out.println (k);}
}
}

Заранее благодарю!
#1 
Murr патриот04.05.11 21:55
Murr
NEW 04.05.11 21:55 
в ответ Victoria_tag 04.05.11 21:51
Так рандом или промежуток?
Если последнее - помнить последние и проверять на вхождение...
от 1 до 84 480 раз
------
Интересно, кто-нибудь это прочел без запинки?
#2 
  digital.pilot патриот04.05.11 21:57
digital.pilot
NEW 04.05.11 21:57 
в ответ Murr 04.05.11 21:55
В ответ на:
Интересно, кто-нибудь это прочел без запинки?

я
#3 
Murr патриот04.05.11 22:02
Murr
NEW 04.05.11 22:02 
в ответ digital.pilot 04.05.11 21:57
Ндаа... видать Я совсем старый стал - три прочтения... и все три - неправильные...
#4 
Knusprig местный житель05.05.11 17:17
Knusprig
NEW 05.05.11 17:17 
в ответ Victoria_tag 04.05.11 21:51
Создать 48 10-местных Set-ов
и заполнять их с помощью вашего генератора пока не заполнятся.
Девки спорили на даче о свойствах ряда Фибоначчи
#5 
ortymd прохожий05.05.11 22:21
NEW 05.05.11 22:21 
в ответ Victoria_tag 04.05.11 21:51, Последний раз изменено 05.05.11 22:27 (ortymd)
import java.util.Random;
import java.util.Date;
public class Main {
public Main() {
}
public static void main(String[] args)
{
// Создаем эррей, где мы будем запоминать последнюю позицию каждого числа. Изначально заполняем его фиктивными негативными значениями, скажем -100
int [] lastPos = new int[84];
for (int j=1; j<=84; j++){
lastPos[j]=-100;
}
int k;
//Создаем генератор случайных чисел.
for (int i=1; i<=480; i++) {
Random generator = new Random();
k = 1+generator.nextInt(84);
// Проверяем, когда в последний раз встречалась число k
if (i-lastPos[k]>10) System.out.println (k);
// Делаем апдейт lastPos
lastPos[k]=i;
}
}
}
#6 
Murr патриот05.05.11 23:23
Murr
NEW 05.05.11 23:23 
в ответ ortymd 05.05.11 22:21
А что по поводу 480?
#7 
Victor! постоялец06.05.11 14:03
Victor!
NEW 06.05.11 14:03 
в ответ Murr 05.05.11 23:23, Последний раз изменено 06.05.11 20:08 (Victor!)
ога, тут бы while, и инкрементить индекс только если выпало трушное число, иначе опять в рандом за новым :)
и алгоритм слабо масштабируем, что если нам нужно не 84 а 84 тыщщи, хранить хистори позиций 84 тыщ чисел? как то накладно
я б организовал бы что-то типа очереди из 10 чисел, и добавлял бы в хвост в случае если данное число отсутствует в очереди
как то так
package example;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Random;
public class random {
private static final int NUM_RANGE = 84;
private static final int NUM_COUNT = 480;
private static final int REPEAT_RANGE = 10;

/**
* @param args
*/
public static void main(String[] args) {
Random random = new Random();
Queue<Integer> queue = new LinkedList<Integer>();
int i = 0;
mainLoop:
while (i < NUM_COUNT) {
int val = random.nextInt(NUM_RANGE) + 1;
for (Integer last : queue) {
if (last.equals(val)) {
continue mainLoop;
}
}
queue.add(val);
if (queue.size() > REPEAT_RANGE) {
queue.remove();
}
System.out.print(val + " ");
i++;
}
}
}


#8 
voxel3d патриот06.05.11 14:14
voxel3d
NEW 06.05.11 14:14 
в ответ Victor! 06.05.11 14:03
Есть же тэг пре. Третья кнопка слева.
Dropbox - средство синхронизации и бэкапа файлов.
#9 
Murr патриот06.05.11 19:58
Murr
NEW 06.05.11 19:58 
в ответ Victor! 06.05.11 14:03
"Люблю" помесь объектов с процедурами...
Сегодня весь день с этим хомутался - выцеживал из нескольких мест фунционал объекта...
К концу дня - сделал объект... А подвязать по месту - уже не успел...
Самое смешное - это... и именно на этом языке... Я делал 12 лет назад...
Если покопаюсь - найду генератор, который тогда использовался... и сгенерю все
за 20 секунд... потом пара часов на подвязку... и все, можно сдавать работу...
Правда чем дальше заниматься - непонятно...
#10