Hallo zusammen,
Ich habe ein kleines Programm in Java geschrieben, das herausfindet, nach wie vielen Verlosungen 6 richtige Zahlen gezogen wurden und wie oft dabei 3, 4 und 5 richtige Zahlen gezogen wurden.
[CODE lang="java" highlight="86-89"]import java.util.Arrays;
import java.util.Scanner;
public class Lottoziehung {
// Lotto spielen
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// Lotto von x aus X
// Tipp erstellen per Eingabe
int tipp[] = new int[6];
int i = 0;
do {
System.out.println("Wie ist dein " + (i + 1) + " .Tipp?");
int tippzwischenspeicher = scan.nextInt();
tipp = tippzwischenspeicher;
boolean zahldoppelt = false;
for (int j = 0; j < i; j++) {
if (tippzwischenspeicher == tipp[j]) {
zahldoppelt = true;
}
}
if (!zahldoppelt && tippzwischenspeicher >= 1 && tippzwischenspeicher <= 49) {
tipp = tippzwischenspeicher;
i++;
}
} while (i < 6);
System.out.println("hier sind deine tipps:");
Arrays.sort(tipp);
for (int k = 0; k < tipp.length; k++) {
System.out.println(tipp[k]);
}
// Lotto 49 Zahlen erzeugen
int aus49[] = new int[49];
for (int l = 0; l < aus49.length; l++) {
aus49[l] = l + 1;
l++;
}
// 3 Tipps, 4 Tipps, 5 Tipps
int einsKorrekte = 0;
int zweiKorrekte = 0;
int dreiKorrekte = 0;
int vierKorrekte = 0;
int funfKorrekte = 0;
int sechsKorrekte = 0;
int haha = 0;
// Schleife für Ziehung
int ziehung[] = new int[6];
int counter = 0;
do {
// Ziehung
for (int m = 0; m < ziehung.length; m++) {
int r = (m + (int) ((Math.random() * aus49.length) - m));
ziehung[m] = r;
boolean randomzahldoppelt = false;
for (int n = 0; n < m; n++) {
if (r == ziehung[n]) {
randomzahldoppelt = true;
m--;
// Ansatz überprüfen, evtl falsch
}
}
}
Arrays.sort(ziehung);
int anzahlRichtige = 0;
for (int o = 0; o < tipp.length; o++) {
for (int p = 0; p < tipp.length; p++) {
if (tipp[o] == ziehung[p]) {
anzahlRichtige++;
}
}
}
switch (anzahlRichtige) {
case 1:
einsKorrekte++;
break;
case 2:
zweiKorrekte++;
break;
case 3:
dreiKorrekte++;
break;
case 4:
vierKorrekte++;
break;
case 5:
funfKorrekte++;
break;
case 6:
sechsKorrekte++;
break;
default:
haha++;
}
counter++;
if (Arrays.equals(tipp, ziehung)) {
System.out.println("einsKorrekte gab es " + einsKorrekte + " !");
System.out.println("zweiKorrekte gab es " + zweiKorrekte + " !");
System.out.println("dreiKorrekte gab es " + dreiKorrekte + " !");
System.out.println("vierKorrekte gab es " + vierKorrekte + " !");
System.out.println("funfKorrekte gab es " + funfKorrekte + " !");
System.out.println("sechsKorrekte gab es " + sechsKorrekte + " !");
System.out.println("Sechs Richtige gab es " + counter + " Ziehungen!");
}
} while (!Arrays.equals(tipp, ziehung));
}
}
[/CODE]
Nach vielen Durchläufen bemerkte ich einen Fehler in der Ausgabe. Das Programm stellte fest, dass nach 1.502 Ziehungen 6 richtige Zahlen gezogen wurden, nicht jedoch 5 richtige Zahlen. Hier ist der Screenshot:
Übersetzt bedeutet das:
Sechs Richtige gab es nach 1502 Ziehungen!
dabei gab es:
- 686x ein Richtige
- 242x zwei Richtige
- 44x drei Richtige
- 3x vier Richtige
- 0x fünf Richtige
- 1x sechs Richtige
Der Fehler ist schwer zu reproduzieren, normalerweise werden nach 3,5 Millionen Ziehungen 6 richtige Zahlen ausgewählt.
Es war ein Zufall, dass ich bereits nach 1.502 Ziehungen 6 richtige Zahlen bekam. Nur so bemerkte ich den Fehler, dass keine fünf richtigen Zahlen ausgewählt wurden.
Ich vermute, der Fehler liegt in den Zeilen 86-89. Weiß jemand wo der Fehler versteckt ist?
Ich habe ein kleines Programm in Java geschrieben, das herausfindet, nach wie vielen Verlosungen 6 richtige Zahlen gezogen wurden und wie oft dabei 3, 4 und 5 richtige Zahlen gezogen wurden.
[CODE lang="java" highlight="86-89"]import java.util.Arrays;
import java.util.Scanner;
public class Lottoziehung {
// Lotto spielen
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// Lotto von x aus X
// Tipp erstellen per Eingabe
int tipp[] = new int[6];
int i = 0;
do {
System.out.println("Wie ist dein " + (i + 1) + " .Tipp?");
int tippzwischenspeicher = scan.nextInt();
tipp = tippzwischenspeicher;
boolean zahldoppelt = false;
for (int j = 0; j < i; j++) {
if (tippzwischenspeicher == tipp[j]) {
zahldoppelt = true;
}
}
if (!zahldoppelt && tippzwischenspeicher >= 1 && tippzwischenspeicher <= 49) {
tipp = tippzwischenspeicher;
i++;
}
} while (i < 6);
System.out.println("hier sind deine tipps:");
Arrays.sort(tipp);
for (int k = 0; k < tipp.length; k++) {
System.out.println(tipp[k]);
}
// Lotto 49 Zahlen erzeugen
int aus49[] = new int[49];
for (int l = 0; l < aus49.length; l++) {
aus49[l] = l + 1;
l++;
}
// 3 Tipps, 4 Tipps, 5 Tipps
int einsKorrekte = 0;
int zweiKorrekte = 0;
int dreiKorrekte = 0;
int vierKorrekte = 0;
int funfKorrekte = 0;
int sechsKorrekte = 0;
int haha = 0;
// Schleife für Ziehung
int ziehung[] = new int[6];
int counter = 0;
do {
// Ziehung
for (int m = 0; m < ziehung.length; m++) {
int r = (m + (int) ((Math.random() * aus49.length) - m));
ziehung[m] = r;
boolean randomzahldoppelt = false;
for (int n = 0; n < m; n++) {
if (r == ziehung[n]) {
randomzahldoppelt = true;
m--;
// Ansatz überprüfen, evtl falsch
}
}
}
Arrays.sort(ziehung);
int anzahlRichtige = 0;
for (int o = 0; o < tipp.length; o++) {
for (int p = 0; p < tipp.length; p++) {
if (tipp[o] == ziehung[p]) {
anzahlRichtige++;
}
}
}
switch (anzahlRichtige) {
case 1:
einsKorrekte++;
break;
case 2:
zweiKorrekte++;
break;
case 3:
dreiKorrekte++;
break;
case 4:
vierKorrekte++;
break;
case 5:
funfKorrekte++;
break;
case 6:
sechsKorrekte++;
break;
default:
haha++;
}
counter++;
if (Arrays.equals(tipp, ziehung)) {
System.out.println("einsKorrekte gab es " + einsKorrekte + " !");
System.out.println("zweiKorrekte gab es " + zweiKorrekte + " !");
System.out.println("dreiKorrekte gab es " + dreiKorrekte + " !");
System.out.println("vierKorrekte gab es " + vierKorrekte + " !");
System.out.println("funfKorrekte gab es " + funfKorrekte + " !");
System.out.println("sechsKorrekte gab es " + sechsKorrekte + " !");
System.out.println("Sechs Richtige gab es " + counter + " Ziehungen!");
}
} while (!Arrays.equals(tipp, ziehung));
}
}
[/CODE]
Nach vielen Durchläufen bemerkte ich einen Fehler in der Ausgabe. Das Programm stellte fest, dass nach 1.502 Ziehungen 6 richtige Zahlen gezogen wurden, nicht jedoch 5 richtige Zahlen. Hier ist der Screenshot:
Übersetzt bedeutet das:
Sechs Richtige gab es nach 1502 Ziehungen!
dabei gab es:
- 686x ein Richtige
- 242x zwei Richtige
- 44x drei Richtige
- 3x vier Richtige
- 0x fünf Richtige
- 1x sechs Richtige
Der Fehler ist schwer zu reproduzieren, normalerweise werden nach 3,5 Millionen Ziehungen 6 richtige Zahlen ausgewählt.
Es war ein Zufall, dass ich bereits nach 1.502 Ziehungen 6 richtige Zahlen bekam. Nur so bemerkte ich den Fehler, dass keine fünf richtigen Zahlen ausgewählt wurden.
Ich vermute, der Fehler liegt in den Zeilen 86-89. Weiß jemand wo der Fehler versteckt ist?
Zuletzt bearbeitet: