# Lotto



## Kranked (14. Jun 2010)

Hallo zusammen,

ich habe ein Problem und hänge seit 2 Stunden an dem Programm und finde nicht den richtigen Weg??
Ich möchte in dem Programm die Lottozahlen ausgegeben lassen und für die Zusatzzahl mit einem Contain die Lottozahlen überprüfen und dadurch die Zusatzzahl aus den restlichen 43 erzeugen lassen!!! Mein Problem besteht darin das ich noch nie mit Contain gearbeitet habe!!!


```
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class Lotto {

	public static void main(String[] args) {
		Random random = new Random();
		System.out.println("Lottoziehung: \n");
		Set<Integer> lottozahlen = new HashSet<Integer>();
		while (lottozahlen.size() < 6) {
			lottozahlen.add(random.nextInt(49)+1);
		}
		for (Integer i : lottozahlen) {
			System.out.println("Lottozahlen: " + i);

		}
	
		Set<Integer> zusatzzahl = new HashSet<Integer>();
		while (zusatzzahl.size() < 1) {
			zusatzzahl.add(random.nextInt(49)+1);
		}
		for (Integer n : zusatzzahl) {
			System.out.println("\n Zusatzzahl: " + n);

		}
	}
}
```


----------



## eRaaaa (14. Jun 2010)

Also du suchst jetzt wahrscheinlich so etwas wie:

```
int zufallszahl = random.nextInt(49) + 1;
			if (!lottozahlen.contains(zufallszahl))
				zusatzzahl.add(zufallszahl);
```

Wobei das Set für die Zusatzzahl irgendwie unnötig ist ? ;/


----------



## Kranked (14. Jun 2010)

@eRaaaa,

danke für das Programm Teil!!! Kannst du mir bitte erklären wofür das "!" und die "zufallszahl" zusammen gehören und wie das funktioniert??

Und warum ist das zweite Set Überflüssig ist, da wenn ich immer versucht habe das herauszunehmen immer Fehler bekommen habe??


----------



## XHelp (14. Jun 2010)

Bin zwar nicht eRaaaa, aber ich hoffe er hat nichts dagegen:

! ist negation.
Du generierst zuerst irgendeine Zahl.
mit 
	
	
	
	





```
lottozahlen.contains(zufallszahl)
```
 überprüfst du, ob die deine generierte Zahl bereits als Lottozahl ausgeworfen wurde. Kriegst also entweder true oder false. Du brauchst aber genau das Gegenteil. Und da kommt die Negation ins Spiel, die aus true>false und aus false>true macht.
D.h. du akzeptierst die generierte Zahl nur, wenn die NICHT als Lottozahl ausgeworfen wurde.
Das ist also das gleiche wie:

```
if (lottozahlen.contains(zufallszahl)) {
} else {
  zusatzzahl.add(zufallszahl);
}
```
(aber sowas zu benutzen ist eher unratsam)


----------



## eRaaaa (14. Jun 2010)

Kranked hat gesagt.:


> @eRaaaa,
> 
> danke für das Programm Teil!!! Kannst du mir bitte erklären wofür das "!" und die "zufallszahl" zusammen gehören und wie das funktioniert??



Als Worte übersetzt heißt das nicht mehr als:
Wenn "lottozahlen" die Zufallszahl *nicht* enthält, füge diese Zufallszahl dem Set hinzu.
Das "nicht" ist das "!". 



> Und warum ist das zweite Set Überflüssig ist, da wenn ich immer versucht habe das herauszunehmen immer Fehler bekommen habe??



Naja ein Set mit nur einer Zahl macht an für sich keinen Sinn, man könnte auch folgendes schreiben

```
int zusatzzahl;
		do {
			zusatzzahl = random.nextInt(49) + 1;
		} while (lottozahlen.contains(zusatzzahl));
		System.out.println("\n Zusatzzahl: " + zusatzzahl);
```

oder aber du generierst nicht 6 Zahlen am Anfang sondern direkt 7 und sagst einfach die letzt Gezogene ist deine Zusatzzahl oder oder oder...gibt mehrere Ideen. Der Ansatz hier, könnte rein theoretisch ja unendlich lang dauern, daher wählt man dafür meist eig. andere Vorgehensweisen, aber das sollte dich jetzt nicht verwirren, wollts nur anmerken :>


----------



## Kranked (14. Jun 2010)

Würden diese Zeilen nicht bedeuten, dass wenn die Zufallszahl in der Lottozahl bereits genannt ist dann als zufallszahl ausgegeben wird und nicht anders herum??



```
while (lottozahlen.contains(zusatzzahl));
        System.out.println("\n Zusatzzahl: " + zusatzzahl);
```

Ja das habe ich auch schon Versucht mit den 7 Zahlen, habe aber leider das Problem das gefordert ist das die Zusatzzahl Einzel ausgegeben werden!!


----------



## eRaaaa (14. Jun 2010)

Ne ne, das ist keine while-Schleife, sondern eine do-while !
Die Ausgabe via System.out. gehört also nicht zur Schleife!(man beachte auch das Semikolon)


----------



## Kranked (14. Jun 2010)

Ich bedanke mich für die schnelle und rasche Antwort!!!


----------



## faetzminator (15. Jun 2010)

eRaaaa hat gesagt.:


> Die Ausgabe via System.out. gehört also nicht zur Schleife!(man beachte auch das Semikolon)



Das ist einer der Gründe, warum man *immer* Klammern verwenden sollte.


----------

