«но он несколько раз показывают 2 вместе несколько раз 3»
Учитывая совершенно случайные числа ... В каждых 100 случайных значениях от 0 до 99, вы найдете в среднем 1,0 двойников. Трижды будет происходить в среднем один раз за каждые 10000 значений. Учитывая 10 миллионов случайных чисел, java.util.Random yeilds следующие результаты на моей машине:
Doubles: 99873
Triples: 985
Double Rate: 1 in 100
Triple Rate: 1 in 10152
Исходный код:
import static java.lang.System.*;
import java.util.Random;
public class Sandbox {
public static final int NUM_ITERATIONS = 10000000;
public static void main(String[] args) {
Random rand = new Random();
int cur;
int last = -1;
int secondLast = -2;
int nDoubles = 0;
int nTriples = 0;
for (int i = 0; i < NUM_ITERATIONS; i++) {
cur = rand.nextInt(100);
if (cur == last) {
nDoubles++;
if (cur == secondLast) nTriples++;
}
secondLast = last;
last = cur;
}
out.println("Doubles: " + nDoubles);
out.println("Triples: " + nTriples);
out.println();
out.println("Double Rate: 1 in " + Math.round(1.0 * NUM_ITERATIONS/nDoubles));
out.println("Triple Rate: 1 in " + Math.round(1.0 * NUM_ITERATIONS/nTriples));
exit(0);
}
}
@Meko: но вы * действительно * Требуется (псевдо) случайных? Для конечных пользователей иногда «поддельный случайный» дает лучшую «случайную иллюзию», чем истинный случайный. Таким образом, вы можете * отказаться от, например, псевдослучайного значения, указанного в * случайном *, который слишком близок к * lastrandom * (который вы будете отслеживать). Например, возможны три аннуитета, которые случайно появляются на экране (173,173) (хотя это маловероятно), но пользователь может предпочесть его, если в вашей игре была защитная сетка, предотвращающая «следующий случайный» от менее 20 пикселей от последнего случайного значения ... – SyntaxT3rr0r