# break/continue in einer if-Abfrage?



## hrumsch (10. Dez 2010)

Hallo zusammen!

Also ich bin, wie sollte es anders sein, Java-Anfänger und komme an einer Stelle nicht weiter. Ich möchte gerne einen Weihnachtskalender schreiben. Ich habe schon das akutelle Systemdatum (tag) mit der Tageseingabe (Tuerchen) des Users verglichen. Dann habe ich auch schon hinbekommen, dass die Tuerchen-Eingabe nicht größer als 24 sein darf, genauso wie die Tuerchen-Eingabe nur kleiner als der wirkliche Tag sein darf.
Nur möchte ich jetzt noch folgende drei Dingen einfügen, wo ich allerdings keine Ahnung habe, wie ich das noch mit einbauen soll:

1. Der Wert Tuerchen darf nicht kleiner als 0 sein (ein negativer Tag ist ja Quatsch)
2. Wenn man 0 eingibt, soll das Programm beendet werden (ich dachte da an break, aber wie kriege ich das hier unter?)
3. Wenn der Wert größer als 24 ist, solll die Aufforderung zur erneuten "Tuerchen-Eingabe" kommen (hier dachte ich an continue, aber selbes Problem wie bei 2.)

Hier ein Ausschnitt von dem, was ich habe:

```
if(Tuerchen<=24){
	
			if(tag < Tuerchen){
			System.out.println("Türchen lässt sich noch nicht öffnen, denn heute ist erst der " + tag + ". Dezember");
			}	
			
			else {
			System.out.println("Türchen wird geöffnet für den " + Tuerchen + ". Dezember");
			}
		}
```


----------



## DanTheMan12 (10. Dez 2010)

1. if-Bedingung zum Ausschluss negativer Zahlen koennte so aussehen: (Tuerchen >= 0)

2. ein break kannst du nach meinem Wissensstand nicht in eine if-else-Anweisung einfügen, sondern in eine Schleife oder switch-Anweisung

3. siehe 2. continue verhält sich genauso, um eine erneute Eingabe zu machen, sofern die vorherige falsch war könntest du die Eingabe in eine Schleife packen, sodass es zum Anfang zurückspringt und du die Eingabe wiederholen kanns

Ich hoffe ich konnte helfen


----------



## ARadauer (10. Dez 2010)

if schleifen gibt es nicht mal ;-)


----------



## hrumsch (10. Dez 2010)

DanTheMan12 hat gesagt.:


> 1. if-Bedingung zum Ausschluss negativer Zahlen koennte so aussehen: (Tuerchen >= 0)



Sitz wohl schon zu lange vor dem Ding, danke dafür!
Wenn hier continue und break nicht gehen, wie soll ich sonst vorgehen?


ARadauer hat gesagt.:


> if schleifen gibt es nicht mal ;-)


Ich gebe mich geschlagen.


----------



## dehlen (10. Dez 2010)

ZU 2) um das Programm abzubrechen könntest du soetwas verwenden: System.exit(0)
allerdings gibt es da schönere methoden wie die JOptionPane... 
ZU1) wie oben benannt prüfe ob Tage >=0 

ZU3) selbe wie 2 prüge einfach z.B mit if ob der Wert >= 24  und dann halt deine Anweisung ;-)


----------



## Gast2 (10. Dez 2010)

> ZU 2) um das Programm abzubrechen könntest du soetwas verwenden: System.exit(0)
> allerdings gibt es da schönere methoden wie die JOptionPane...


Öhm, was hat System.exit mit nem JOptionPane zu tun ???:L :rtfm:


----------



## dehlen (11. Dez 2010)

Mit System.exit wollte ich zeigen wie sie das Programm beenden lassen kann was ja auch die Feage war .... Dann habe ich noch hinzugefügt dass es auch schönere Methoden als ein Programm abzubrechen gibt z.B köntte man ja ein joptionpane machen.... Das war mein Gedanke
Klar geworden ??


----------



## hrumsch (11. Dez 2010)

Also das mit dem System.exit() hat funktioniert, bleibt nur noch das mit dem continue.

Das Problem ist, dass ich für die Eingabe das hier geschrieben habe: "int Tuerchen = input.nextInt();". Mit dem Tuerchen mache ich dann die if-Anweisung, wie oben gepostet. Das Problem ist jetzt aber natürlich, dass ich das Tuerchen als int nicht nochmal benutzen darf, was bedeutet, dass ich es auch nicht in die Schleife einbauen kann.
Wenn ich es dann umbennenen würde, in z.B. Tuerchen1, dann müsste ich ja wieder die selbe if-Anweisung mit dem Tuerchen1 machen. Je nachdem, wie oft der Benutzer den Vorgang wiederholenn will, muss praktisch unendlich viele Tuerchenxy machen...


----------



## eRaaaa (11. Dez 2010)

dehlen hat gesagt.:


> Klar geworden ??



Mir nicht, den Zusammenhang verstehe ich nicht 
Hättest du eine Alternative aufgeführt, die zum Programmabbruch (z.B. eine RuntimeException werfen, oder ein return; etc.) wäre das verständlicher, aber die Aufgabe eines JOptionPanes ist doch eine ganz andere?!


----------



## hrumsch (11. Dez 2010)

Achja: Ich möchte mich hier nicht auf continue versteifen, ist halt das einzige, was ich so kenne. Wenn es da noch was anderes gibt, dann her damit. Continue geht ja meines Wissens nur mit Schleifen und das hat (soweit ich es kenne) immer mit einer Inkrementierung zutun, was ich aber hier nicht brauche.


----------



## dehlen (11. Dez 2010)

eRaaaa hat gesagt.:


> Mir nicht, den Zusammenhang verstehe ich nicht
> Hättest du eine Alternative aufgeführt, die zum Programmabbruch (z.B. eine RuntimeException werfen, oder ein return; etc.) wäre das verständlicher, aber die Aufgabe eines JOptionPanes ist doch eine ganz andere?!



Ich meinte nur das er das programm ja nicht direkt abbrechen lassen muss sondern auch eine jOptionPane einbauen könnte einfach weil es schöner ist so ein Fenster zu bekommen als das ganze Programm abstürzen zu lassen =)


----------



## hrumsch (12. Dez 2010)

Hat wirklich keiner eine Lösung parat?:shock:

Hier einmal das wichtigste vom Programm:


```
System.out.println("Welches Türchen soll geöffnet werden (beenden mit 0)?");
		int Tuerchen = input.nextInt();
		
		
					
		if(Tuerchen == 0){
			System.exit(0);
			System.out.println("Programm wurde beendet.");
		}
		
		if(Tuerchen <= 24){
			
			if(Tuerchen>0){
	
				if(day < Tuerchen){
					System.out.println("Türchen lässt sich noch nicht öffnen, denn heute ist erst der " + day + ". Dezember");
				}	
				else {
					System.out.println("Türchen wird geöffnet für den " + Tuerchen + ". Dezember");
				}
			}
			else{
				System.out.println("Ungültige Eingabe, welches Türchen soll geöffnet werden (beenden mit 0)?");
			}
			
		}
		else{
			System.out.println("Ungültige Eingabe, welches Türchen soll geöffnet werden (beenden mit 0)?");
		}
```



Jedes mal, wenn da steht "Ungültige Eingabe, welches Türchen soll geöffnet werden (beenden mit 0)?", soll das Programm wieder ganz an den Anfang (int Tuerchen = input.nextInt(); ). Input ist der Name des "Scanners"...
Wäre super, wenn mir da noch geholfen werden könnte, dann wäre es nämlich perfekt.


----------



## andiv (12. Dez 2010)

Wenn du etwas wiederholen musst, dann brauchst du eine Schleife (oder Rekursion), mit if-Abfragen allein bekommst du sowas nicht hin. Da du nicht weißt wie oft wiederholt werden muss bietet sich eine while bzw. do...while-Schleife eher an als eine for-Schleife (wobei es damit natürlich auch möglich wäre).


----------



## hrumsch (12. Dez 2010)

Ja das mit der while-Schleife dachte ich mir schon, aber wie bringe ich das hier unter? Da fehlt mir irgendwie noch das Können...


----------



## andiv (12. Dez 2010)

```
boolean again = true;
do {
    System.out.println("Welches Türchen soll geöffnet werden (beenden mit 0)?");
    int tuerchen = input.nextInt();
    
    if(tuerchen == 0) {
        System.out.println("Programm wurde beendet.");
        System.exit(0);
    }
    
    if(0 < tuerchen && tuerchen <= 24) {
        if(day < tuerchen) {
            System.out.println("Türchen lässt sich noch nicht öffnen, denn heute ist erst der " + day + ". Dezember");
        } else {
            System.out.println("Türchen wird geöffnet für den " + tuerchen + ". Dezember");
        }
        again = false;
    } else {
        System.out.println("Ungültige Eingabe");
    }
} while(again);
```


----------



## hrumsch (12. Dez 2010)

Tausend Dank für Deine Hilfe.
Habe echt ganz schön umständlich programmiert, danke für die Kosmetik!


----------

