# break & continue: sprungmarken



## SebastianK (31. Okt 2007)

hallo,

so mein erster beitrag 

was break und continue machen weiß ich, allerdings komme ich mit den sprungmarken nicht zurecht.
auch wenn man sie selten braucht, würd ich gern die handhabung verstehen^^

kann man mit "break/continue marke;" nur nach oben springen oder auch nach unten?
hab sowohl gelesen das es nur nach oben geht als auch, dass "break marke;" nach unten springt und "continue marke;" nach oben.

daran schließt sich: ist es egal ob ich break oder continue mit einer sprungmarke verwende?


hoffe mir kann das jemand irgendwie bantworten....

mfg


----------



## Bert Brenner (31. Okt 2007)

Beispiel eine for-schleife.

Ein continue in der Schleife bedeutet das sofort mit dem nächsten durchgang der Schleife begonnen wird.

Ein break bedeutet das die Schleife verlassen wird.


----------



## SebastianK (31. Okt 2007)

danke für die antwort, aber das war mir klar 

mir gehts um die verbindung mit einer sprungmarke und wie sich das programm dann verhält.


----------



## ARadauer (31. Okt 2007)

du meinst dass du an eine bestimme stelle im code springen kannst.
das ähnelt ja sehr dem goto befehl und sollte dringlichst vermieden werden!

uns wurde im studium sehr verdeutlicht dass wir das nicht machen sollen. stichwort: Spaghetti code
ich habe auch ehrlich gesagt noch nie gesehen, dass das wirklich jemand verwendet.

ps: wenn du wirklich wissen willst, wie sich das program verhält, (noch oben oder unten springen) probiers einfach aus.


----------



## Bert Brenner (31. Okt 2007)

Meinst du evtl. bei nem Switch? Da sollte nur break funktionieren.

Zeig doch mal was du für Sprungmarken meinst.


----------



## Evolver (31. Okt 2007)

continue kann meines Wissens nach nur in Schleifen verwendet werden (um in den nächsten Durchlauf zu springen).
break bricht den aktuellen Block ab.


EDIT: Noch ein kleines Beispiel zu den "Sprungmarken":
	
	
	
	





```
Marke1:
{
	System.out.println("Marke1");
	Marke2:
	{
		System.out.println("Marke2");
		if(/*irgendwas*/) break Marke1;
	}
	System.out.println("Ende Marke1");
}
```
Diese "Sprungmarken" dienen also im Grunde nur dazu, dass man auch bei verschachtelten Blöcken direkt auf einem übergeordneten Block herausspringen kann. Ist die Bedingung im obigen Beispiel erfüllt, so würde der Text _Ende Marke1_ nicht ausgegeben.


----------



## SebastianK (31. Okt 2007)

jop das springen an bestimmte stellen meine ich.

ein besipiel:

```
marke:
for (int i=0; i<6; i++) {
  System.out.println( i );
  if (i == 3) {
    break marke;
    //oder continue marke; (?)
  }
}
```

also eine frage wäre nun, ob man mittels sprungmarken nur nach oben springen kann oder auch nach unten.
und ob "break marke;" das gleiche ist wie "continue marke;"


zu dem beispiel:
wenn ich "break marke;" verwende ist die ausgabe "1 2 3" und bei "continue marke;" ist sie "1 2 3 4 5".

verstehe nur nicht so recht warum...

-------
edit:
@Evolver: zu deinem beispiel: 
wenn die if-bedingung true ergibt springt er ja zu Marke1.
aber warum wird dann nicht ab Marke 1 weitergearbeitet? 
ich dachte immer das jedesmal, wenn an eine Marke gesprungen wird, der folgende Code ausgeführt wird...ist hier allerding nicht der fall.

beim verwenden von continue erhalte ich ne fehlermeldung und nach unten kann ich auch nicht springen...hm..


----------



## *Hendrik (31. Okt 2007)

Interessant sind Sprungmarken eigentlich nur bei mehreren verschachtelten Schleifen. Beispiel Java-Insel

Die Ausgabe ist bei break marke -> 1 2 3, weil Du mit break den Schleifendurchlauf komplett abbrichtst und die for-Schleife verlässt, während Du bei continue marke nur den aktuellen Schleifendurchlauf beendest und wieder an den Anfang der Schleife springst und den nächsten Durchlauf beginnst - also die Standardfunktionalitäten von break und continue (Java-Insel). In Deinem Beispiel ist die Verwendung einer Sprungmarke im Grunde nicht notwendig - da keine Verschachtelung vorhanden ist.
Dementsprechend sollte es auch nur möglich sein, nach oben zu springen, d.h. zu einer umgebenden Schleife.


----------



## Evolver (31. Okt 2007)

> wenn die if-bedingung true ergibt springt er ja zu Marke1.
> aber warum wird dann nicht ab Marke 1 weitergearbeitet?


Das ist falsch, mit brak "springt" man in dem Sinne nirgens hin, sondern die bearbeitung des zu Marke1 gehörenden Block wird "abgebrochen". Wie *Hendrik schon sagte, macht das eigentlich nur bei Verschachtelungen Sinn, denn mit dem einfachen break könnte ich immer nur den aktuellen Block abbrechen.


----------



## Saxony (31. Okt 2007)

Hiho,

ausserdem müsste nach SebastiansK Theorie sein Code permanent 123 ausgeben, da er sich so einen Endlossprung gebastelt hat.

Da aber nur einmal 123 ausgegeben wird, ist anzunehmen, dass mit break marke der komplette Block beendet wird und nicht wieder nach oben gesprungen wird.

bye Saxony


----------



## SebastianK (31. Okt 2007)

> sein Code permanent 123 ausgeben


jop das hatte ich gedacht.

ich danke für die antworten!!!


----------

