# Errate die Zahl! Do/While Schleife endet nicht



## stibi (7. Nov 2012)

Guten Abend allerseits!

Also folgende Aufgabe: Ich muss in einer Klasse eine Zufallszahl generieren, in einem vom Benutzer vorher festgelegten Bereich. Danach muss er raten welche Zahl es ist. Ratet er zu hoch soll er darauf hingewiesen werden, dass die Zahl zu gross ist und das entsprechende wenn die Zahl kleiner ist. Nachdem er die Zahl erraten hat, soll er wählen können ob er nochmal spielen will oder das Spiel beenden. Hier mal der Code der Execute Class:


```
import java.lang.Math;
import java.util.Scanner;

public class Execute{
	
	public static void spiel(int von, int bis){
		int guess;
		int zufall = von + (int) (Math.random()* bis);
		int ja1 = 0;
		
		do{
			System.out.println("Versuchen Sie die Zahl zu erraten!");
			System.out.println("Tippen sie Ihre Vermutung ein: ");
			guess = new Scanner(System.in).nextInt();
			if(guess == zufall){
				System.out.println("Gratulation, Sie haben die Zahl erraten");
			}
			else{
				if(guess > zufall){
					System.out.println("Die Zahl ist kleiner");
				}
				else if(guess < zufall){
					System.out.println("Die Zahl ist grösser");
				}
			}
		}
		while(zufall != guess);
		do{
			System.out.println("Wollen Sie erneut spielen?");
			System.out.println("Tippen Sie Ja oder Nein ein");
			String frage = new Scanner(System.in).next();
			
			ja1 = (int)frage.charAt(0);
			if(ja1 == 106 || ja1 == 152){
				System.out.println("Spiel wird neu gestartet!");
				Main.main(null);
			}
			else if(ja1 == 110 || ja1 == 116){
				System.out.println("Spiel wird beendet");
			}
			else{
				System.out.println("Sie haben weder Nein noch Ja eingegeben. Bitten eingabe wiederholen!");
			}
		}
		while(ja1 != 106 || ja1 !=  112 || ja1 != 110 || ja1 != 152);
	}	
}
```

Soweit funktioniert alles. Abgesehen von der letzen Do/While Schleife. Wenn ich Ja oder ja eintippe wird das Programm neu gestartet wie es soll. Doch tippe ich nein/Nein ein, kommt zwar der String "Spiel wird beendet" aber danach werde ich erneut gefragt, ob ich erneut spielen will. Wieso das? Wenn ich Nein/nein eintippe, hat ja die Variable ja1 den Wert 156 bzw.116. Die While Bedingung sollte ja dann die Schleife beenden?

Vielen Dank für jegliche Hilfe!

Grüsse Stibi


----------



## eRaaaa (7. Nov 2012)

Naja, übersetze den Code doch mal ins sprachliche:

Tue etwas solange wie (ja1 nicht gleich 106 *ODER!* .....ja1 nicht gleich 152)

Wenn ja1 jetzt 152 ist, ist zwar der letzte Teil false, aber ja1 kann nicht gleichzeitig auch gleich 106 sein -> also ungleich 106 -> Schleife läuft weiter


----------



## TryToHelp (7. Nov 2012)

wie eRaaaa ja sagt, mache mal aus den 
	
	
	
	





```
||
```
 ein 
	
	
	
	





```
&&
```


----------



## stibi (7. Nov 2012)

;(

Ja - logisch... Es sind immer solche Kleinigkeiten, welche man übersieht. Wie auch immer - Danke Euch für die schnelle Hilfe!

Grüsse

Stibi


----------

