Der folgende Code soll zufälligen Tag des Jahres generieren, und alle 2 Personen, die gleichen Geburtstag haben übereinstimmen. Dies ist bekannt als Geburtstagsproblem. Der Code funktioniert, aber die Ausgabe ist falsch.Geburtstagswahrscheinlichkeit: falsche Ausgabe
public double simulate(int size, int count) {
Random random = new Random();
double x[] = new double[size];
double matches = 0;
boolean isMatch = false;
random.setSeed(count);
for (int i = 0; i < count; i++) {
for (int j = 0; j < size; j++) {
x[j] = random.nextInt(365);
for (int k = j + 1; k < size; k++) {
if (x[j] == x[k]) {
matches++;
isMatch = true;
break;
}
}
if (isMatch) {
isMatch = false;
break;
}
}
}
return (matches/count)*100;
}
und hier ist die erwartete Ausgabe Ergebnis
simulate(number of people,number of simulation)
simulate(5, 10000) output = 2.71
simulate(7, 5000) output = 5.34
simulate(2, 10000) output = 0.27
simulate(9, 10000) output = 9.47
simulate(30, 20000) output = 70.675
simulate(15, 50000) output = 25.576
simulate(35, 50000) output = 81.434
simulate(45, 50000) output = 94.2
und das, was tatsächliche Ausgang:
simulate(5, 10000) output = 2.54
simulate(7, 5000) output = 5.64
simulate(2, 10000) output = 0.18
simulate(9, 10000) output = 9.05
simulate(30, 20000) output = 68.98
simulate(15, 50000) output = 25.12
simulate(35, 50000) output = 79.90
simulate(45, 50000) output = 92.99
Dank für Ihre Zeit.
Warum verwenden Sie 'doubles' in' double x [] = new double [size]; Doppeltreffer = 0; '? –
Okay, versuchen Sie herauszufinden, was eine "Simulation" ist. Wenn Sie eine Simulation mit einem Zufallsgenerator durchführen, erhalten Sie nicht genau die gleichen Ergebnisse wie ein erwarteter Wert. Wenn Sie genügend Stichproben verwenden, wird das Ergebnis geschlossen. In Ihrem Fall liegen die Ergebnisse alle nahe bei Ihren erwarteten Werten. Ihr Programm scheint also gut zu funktionieren. –
@ScaryWombat Größe ist die Anzahl der Personen und Übereinstimmungen werden jedes Mal erhöht, wenn 2 Werte mit –