# Lotto Zufallszahlen zählen



## gaia (18. Nov 2008)

Guten Abend liebe Community,
bin noch etwas neu in Java und habe eine Frage zu folgendem Problem:
Wir sollen Lottoziehungen simulieren. Dabei besteht die erste Aufgabe darin 10 Ziehungen mit jeweils 6 Zufallszahlen + Zusatzzahl ausgeben zu lassen. Dabei hatte ich auch kein Problem.
Hier der Quellcode dazu (es wird auch auf Nullen und doppelte Zahlen geprüft):


```
public class Lottozahlen {

	//Bestimmung einer Zufallszahl
	public static int zufallszahl() {
		java.util.Random zufallszahlen = new java.util.Random();	// Erzeugt das Objekt 'zufallszahlen' zur Bestimmung von Zufallszahlen
		int zufallszahlenint = zufallszahlen.nextInt(50);			// Liefert die nächste positive Integer-Zahl im Intervall von 0 bis 49 (Intervall startet bei 0, daher muss der Wert 50 sein, um 49 mögliche Zufallszahlen generieren zu können
		return zufallszahlenint;
	}

	//Methode zum bestimmen der sechs Zufallszahlen, sowie der Zusatzzahl
	public static void ziehung6Aus49() {
		int zufallszahlenArray[] = new int[7];						//Erzeugt ein Integer-Array der Länge 7 (sechs Zufallszahlen + eine Zusatzzahl)

		int k = 0;													//k ist der Laufparameter der folgenden While-Schleife um sechs Zufallszahlen + eine Zusatzzahl zu erzeugen, doppelte Zahlen überprüfen und kein Null bei den erzeugten Zufallszahlen zuzulassen
		int zahl;													//Variable der Zufallszahlen, die beim Aufrufen der zufallszahl()-Methode erzeugt wird
		boolean vorhanden;											//Abfragevariable, ob eine Zahl bereits vorhanden(true), oder nicht vorhanden (false) ist
		while (k < zufallszahlenArray.length) {						//Solange k kleiner als als die Länge des Arrays (=7) ist soll die Schleife durchlaufen werden; die ist nötig für die sechs Zufallszahlen + eine Zusatzzahl
			zahl = zufallszahl();									//Mit dem Aufruf der Methode 'zufallszahl()' wird der Variable 'zahl' eine neue Zufallszahl im Intervall von 0 bis 49 zugewiesen
			if (zahl > 0) {											//Um zu verhindern, dass keine Null gezogen wird soll das überprüfen auf vorhanden/nicht vorhanden sein, sowie das Eintragen erst dann ausgeführt, wenn die Zufallszahl 'zahl' nicht 0 ist

				// Prüfen, ob eine bereits gezogenen Zufallszhal schon vorhanden ist
				vorhanden = false;									//Ausgangswert = nicht vorhanden
				for (int i = 0; i < zufallszahlenArray.length; i++) {	//
					if (zahl == zufallszahlenArray[i]) {				//Sobald eine Zufallszahl generiert wurde und dem Zufallszahlenarray an der Stelle i zugewiesen wurde ist diese Zahl bereits vorhanden, womit vorhanden = true folgt. Dies verhindert, dass eine Zahl mehr als einmal in einer Ziehung vorkommen kann
						vorhanden = true;
					}
				}

				// Wenn die Zahl nicht vorhanden ist, soll sie eingetragen werden
				if (vorhanden == false) { 								//Wenn die Zahl nicht vorhanden ist, dann...
					zufallszahlenArray[k] = zahl;						//Dann soll dem Array an der Stelle k die oben erzeugte Zufallszahl zugeordnet werden -> s.o: zahl = zufallszahl();
					if (k == (zufallszahlenArray.length - 1)) {			//Wenn k=6, dann wird nach der Ausgabe der sechs Zufallszahlen eine Zusatzahl ausgegeben. Dies erfolgt erst dann, wenn vorher die sechse Zufallszahlen erzeugt wurden
						System.out.print("\tZusatzzahl:\t" + zufallszahlenArray[k]);	//Wenn die Bedingung erfüllt ist (k=6), dann wird die Zusatzzahl am Ende ausgegeben
					} 
					else {												//Andernfalls, also für k=0,1,2,3,4 und 5 werden die sechs Zufallszahlen ausgegeben, die vorher mit 'zufallszahlenArray[k] = zahl' in das Array geschrieben wurden ausgegeben
						System.out.print(zufallszahlenArray[k] + "\t");	//Gibt die sechs Zufallszahlen für k=0,1,2,3,4, und 5 aus
					}
					k++;												//Nach Durchlauf der While-Schleife wird k um eins erhöht, bis k<7, um die sechs Zufallszahlen und eine Zusatzzahl zu erzeugen
				}
			}
		}
	}

	public static void main(String[] args) {

		//Aufgabe a) Die Zufallszahlen sollen auf dem Bildschirm ausgegeben werden und die Methode ziehung6Aus49() zehn Mal aufgerufen werden
		for (int i = 1; i <= 10; i++) {								//For-Schleife, damit die Methode zehn Mal aufgerufen wird
			System.out.print(i + ". Ziehung: \n");					//Vor jeder Ausgabe der Zufalls- und Zusatzzahlen wird die Überschrift "x. Ziehung" ausgegeben
			ziehung6Aus49();										//Die Methode ziehung6Aus49() wird aufgerufen und damit die erzeugten Zufallszahlen, sowie die Zusatzzahl ausgegeben
			System.out.print("\n" + "################################################################################" + "\n \n"); //Trenner zwischen den Ziehungen
		}
	}

}
```

Die zweite Aufgabe besteht darin, dass 10000 Ziehungen simuliert werden sollen, und dabei gezählt werden soll, wie oft jede Zahl gezogen wurde und wie oft jede Zahl als Zusatzzahl gezogen wurde.
Da habe ich gedacht, dass ich meine Methode "ziehung6Aus49()" aus der Klasse Lottozahlen nur ein wenig abändere:

```
public class aufgabe_b {
	
	//Methode zum bestimmen der sechs Zufallszahlen, sowie der Zusatzzahl OHNE Ausgabe der Zufallszahlen und Zusatzzahlen (Abänderung der Methode aus Aufgabenteil a)), da hier 10.000 Ziehungen simuliert werden und die gezogenen Zahlen gezählt werden sollen
	public static void ziehung6Aus49OhneAusgabe() {
		int zufallszahlenArray[] = new int[7];						//Erzeugt ein Integer-Array der Länge 7 (sechs Zufallszahlen + eine Zusatzzahl)

		int k = 0;													//k ist der Laufparameter der folgenden While-Schleife um sechs Zufallszahlen + eine Zusatzzahl zu erzeugen, doppelte Zahlen überprüfen und kein Null bei den erzeugten Zufallszahlen zuzulassen
		int zahl;													//Variable der Zufallszahlen, die beim Aufrufen der zufallszahl()-Methode erzeugt wird
		boolean vorhanden;											//Abfragevariable, ob eine Zahl bereits vorhanden(true), oder nicht vorhanden (false) ist
		while (k < zufallszahlenArray.length) {						//Solange k kleiner als als die Länge des Arrays (=7) ist soll die Schleife durchlaufen werden; die ist nötig für die sechs Zufallszahlen + eine Zusatzzahl
			zahl = Lottozahlen.zufallszahl();									//Mit dem Aufruf der Methode 'zufallszahl()' wird der Variable 'zahl' eine neue Zufallszahl im Intervall von 0 bis 49 zugewiesen
			if (zahl > 0) {											//Um zu verhindern, dass keine Null gezogen wird soll das überprüfen auf vorhanden/nicht vorhanden sein, sowie das Eintragen erst dann ausgeführt, wenn die Zufallszahl 'zahl' nicht 0 ist

				// Prüfen, ob eine bereits gezogenen Zufallszhal schon vorhanden ist
				vorhanden = false;									//Ausgangswert = nicht vorhanden
				for (int i = 0; i < zufallszahlenArray.length; i++) {	//
					if (zahl == zufallszahlenArray[i]) {				//Sobald eine Zufallszahl generiert wurde und dem Zufallszahlenarray an der Stelle i zugewiesen wurde ist diese Zahl bereits vorhanden, womit vorhanden = true folgt. Dies verhindert, dass eine Zahl mehr als einmal in einer Ziehung vorkommen kann
						vorhanden = true;
					}
				}

				// Wenn die Zahl nicht vorhanden ist, soll sie eingetragen werden
				if (vorhanden == false) { 								//Wenn die Zahl nicht vorhanden ist, dann...
					zufallszahlenArray[k] = zahl;						//Dann soll dem Array an der Stelle k die oben erzeugte Zufallszahl zugeordnet werden -> s.o: zahl = zufallszahl();
					//Hier wurde die Ausgabe der Lottoziehungen entfernt
					k++;												//Nach Durchlauf der While-Schleife wird k um eins erhöht, bis k<7, um die sechs Zufallszahlen und eine Zusatzzahl zu erzeugen
				}
			}
		}
	}

	public static void main(String[] args) {

		//Aufgabe a) Die Zufallszahlen sollen auf dem Bildschirm ausgegeben werden und die Methode ziehung6Aus49() zehn Mal aufgerufen werden
		for (int i =1 ; i <= 10000; i++) {								//For-Schleife, damit die Methode zehn Mal aufgerufen wird
			ziehung6Aus49OhneAusgabe();										//Die Methode ziehung6Aus49() wird aufgerufen und damit die erzeugten Zufallszahlen, sowie die Zusatzzahl ausgegeben
		}
		for (int j = 1; j <= 49; j++) {
			System.out.println("Die " + j + " wurde " + j + " Mal gezogen." );
		}	
		
		
	}

}
```
Ich habe bei der Methode die Ausgabestrings entfernt, da ja keine Ausgabe der eigentlichen Ziehungen mehr stattfinden soll und in der Mainmethode habe ich eine Schleife, die dei Methode 10.000 Mal aufruft.
*Jetzt weiß ich leider nicht, wie ich die Zahlen, die gezogen wurden zählen kann und auswerten kann *
Habe vllt gedacht, dass es nach der Zuweisung der Zahlen in der Methode geschehen kann und dass dann jeweils ein Zähler für eine Zahl erhöht wird, wenn diesse gezogen wurde.

Würde mich über einige Anregungen sehr freuen. Danke!

Greetz Gaia


----------



## flasche000 (19. Nov 2008)

```
public class  {
	static int[][] anzahl = new int[50][2];
	   public static void ziehung6Aus49OhneAusgabe() {
	      int zufallszahlenArray[] = new int[7];                  //Erzeugt ein Integer-Array der Länge 7 (sechs Zufallszahlen + eine Zusatzzahl)

	      int k = 0;                                       //k ist der Laufparameter der folgenden While-Schleife um sechs Zufallszahlen + eine Zusatzzahl zu erzeugen, doppelte Zahlen überprüfen und kein Null bei den erzeugten Zufallszahlen zuzulassen
	      int zahl;                                       //Variable der Zufallszahlen, die beim Aufrufen der zufallszahl()-Methode erzeugt wird
	      boolean vorhanden;                                 //Abfragevariable, ob eine Zahl bereits vorhanden(true), oder nicht vorhanden (false) ist
	      while (k < zufallszahlenArray.length) {                  //Solange k kleiner als als die Länge des Arrays (=7) ist soll die Schleife durchlaufen werden; die ist nötig für die sechs Zufallszahlen + eine Zusatzzahl
	         zahl = Lottozahlen.zufallszahl();                           //Mit dem Aufruf der Methode 'zufallszahl()' wird der Variable 'zahl' eine neue Zufallszahl im Intervall von 0 bis 49 zugewiesen
	         if (zahl > 0) {                                 //Um zu verhindern, dass keine Null gezogen wird soll das überprüfen auf vorhanden/nicht vorhanden sein, sowie das Eintragen erst dann ausgeführt, wenn die Zufallszahl 'zahl' nicht 0 ist

	            // Prüfen, ob eine bereits gezogenen Zufallszhal schon vorhanden ist
	            vorhanden = false;                           //Ausgangswert = nicht vorhanden
	            for (int i = 0; i < zufallszahlenArray.length; i++) {   //
	               if (zahl == zufallszahlenArray[i]) {            //Sobald eine Zufallszahl generiert wurde und dem Zufallszahlenarray an der Stelle i zugewiesen wurde ist diese Zahl bereits vorhanden, womit vorhanden = true folgt. Dies verhindert, dass eine Zahl mehr als einmal in einer Ziehung vorkommen kann
	                  vorhanden = true;
	               }
	            }

	            // Wenn die Zahl nicht vorhanden ist, soll sie eingetragen werden
	            if (vorhanden == false) {                         //Wenn die Zahl nicht vorhanden ist, dann...
	               zufallszahlenArray[k] = zahl;                  //Dann soll dem Array an der Stelle k die oben erzeugte Zufallszahl zugeordnet werden -> s.o: zahl = zufallszahl();
	               //Hier wurde die Ausgabe der Lottoziehungen entfernt
	               anzahl[zahl][0]+=1;
	               if (k==6)
	            	   anzahl[zahl][1]+=1;
	               k++;                                    //Nach Durchlauf der While-Schleife wird k um eins erhöht, bis k<7, um die sechs Zufallszahlen und eine Zusatzzahl zu erzeugen
	            }
	         }
	      }
	   }

	   public static void main(String[] args) {

	      //Aufgabe a) Die Zufallszahlen sollen auf dem Bildschirm ausgegeben werden und die Methode ziehung6Aus49() zehn Mal aufgerufen werden
	      for (int i =1 ; i <= 10000; i++) {                        //For-Schleife, damit die Methode zehn Mal aufgerufen wird
	         ziehung6Aus49OhneAusgabe();                              //Die Methode ziehung6Aus49() wird aufgerufen und damit die erzeugten Zufallszahlen, sowie die Zusatzzahl ausgegeben
	      }
	      for (int j = 1; j <= 49; j++) {
	         System.out.println("Die " + j + " wurde " + anzahl[j][0] + " Mal gezogen. Davon "+anzahl[j][1]+" Mal als Zusatzzahl." );
	      }   
	      
	      
	   }

	}
```

ein 2dim. array zählt die jeweiligen ziehunge. [x][1] ist dabei der zusatzzahlen zähler.
hoffe das ist auch was du suchst 
mfg


----------



## L-ectron-X (19. Nov 2008)

Suche mal im Forum. Lottozahlen-Generatoren gibts inzwischen einige hier im Forum.


----------



## gaia (19. Nov 2008)

Besten Dank flasch!
Das ist genau das, was ich gesucht habe!!!
Läuft bestens


----------

