Существует вопрос интервью следующим образом: «В некотором месте люди любят девочек больше, чем мальчиков. Когда-то у пары есть девушка, они не считают, что у нее второй ребенок. , если первый ребенок не девочка, у них будет второй ребенок ... пока у них не будет девушки. Предположим, что вероятность получить девочку составляет 50%, каково соотношение девочек и мальчиков ».имитирует распределение геометрии в Java
Из распределения геометрии отношение равно 1: 1.
Я хочу имитировать соотношение в Java. Вот мой код,
package art.programming.algorithm;
import java.util.Random;
public class Probability {
private int numOfGirls = 0;
private int numOfBoys = 0;
private void random(){
if (new Random().nextInt(1000000) >= 500000){
numOfGirls = numOfGirls + 1;
return;
}
numOfBoys = numOfBoys + 1;
random();
}
public static void main(String... args){
Probability p = new Probability();
for (int j=0; j<100; j++){
System.out.println(j + " test");
for (int i=0; i<10000000; i++){
p.random();
}
System.out.println("Boys " + p.numOfBoys);
System.out.println("Girls " + p.numOfGirls);
p.numOfBoys=0;
p.numOfGirls=0;
}
}
}
Однако результат показывает, что количество мальчиков всегда больше, чем количество девочек. Из этих сообщений Why is random not so random? и http://engineering.mit.edu/live/news/1753-can-a-computer-generate-a-truly-random-number, я думаю, что истинная случайность не может быть создана без конкретной поддержки аппаратного обеспечения. В результате не удается смоделировать распределение геометрии? Мне интересно, есть ли способ улучшить случайность, так что отношение мальчиков к девушкам иногда составляет 10030100: 10000000, иногда 9999100: 10000000.
EDIT: после помещения нового Random() из случайного метода , Я получил ожидаемый результат.
Вы имели в виду 'simulate'? –
Случайные числа из java можно считать истинно случайными для 99% приложений. Вам не нужны истинные случайные числа для этого –
. «Введите код здесь» предполагает, что это домашнее задание. Это? – Gunslinger