Hallo,
ich bin gerade auf ein für mich nicht nachvollziehbares Phänomen gestossen.
int ja = 0, nein = 0;
while (ja < 1000 && nein < 1000) {
if (random.nextInt() % 2 == 1) {
ja++;
} else {
nein++;
}
}
System.out.println("Ja: " + ja + ", Nein: " + nein);```
**Jedes** Mal bei der Ausführung kommt der Nein-Zähler auf 1000 und der Ja-Zähler nur auf knapp 350. Der Hammer ist aber, wenn ich die sechste Zeile von
``` if (random.nextInt() % 2 == 1) {```
nach
``` if (random.nextInt() % 2 == 0) {```
ändere, sind die Zähler wieder gleichmässig verteilt (beide ungefähr bei 1000).
Um es kurz zusammenzufassen: Wenn ich eine zufällige Zahl % 2 auf 0 prüfe, liegt alles im normalen Bereich, aber wenn ich das Resultat auf 1 prüfe (und ich ändere wirklich nur diese eine Zahl, alles andere bleibt gleich), gibt es immer massive Abweichungen von der Wahrscheinlichkeit.
Hier 10 Durchläufe, wenn mit 1 verglichen wird:
Ja: 349, Nein: 1000
Ja: 351, Nein: 1000
Ja: 344, Nein: 1000
Ja: 323, Nein: 1000
Ja: 322, Nein: 1000
Ja: 294, Nein: 1000
Ja: 360, Nein: 1000
Ja: 335, Nein: 1000
Ja: 340, Nein: 1000
Ja: 370, Nein: 1000
Und hier 10 Durchläufe, wenn mit 0 verglichen wird:
Ja: 1000, Nein: 975
Ja: 1000, Nein: 948
Ja: 1000, Nein: 956
Ja: 989, Nein: 1000
Ja: 1000, Nein: 965
Ja: 951, Nein: 1000
Ja: 974, Nein: 1000
Ja: 985, Nein: 1000
Ja: 1000, Nein: 982
Ja: 930, Nein: 1000
Weiss jemand, woran das liegt? Oder überseh ich da grad irgendwas total?