break in zwei for-schleifen
-
Hallo.
Ich hab zwei Schleifen am Laufen:
for(int i=0; i<5; ++i)
for(int j=0; j<5; ++j)
if(j==4) break;wenn die if anweisung true wird, soll sowohl die schleife abgeborchen werden, die das if im rumpf beinhaltet, als auch die schleife,
die die for-schleife mit der break anweisung beinhaltet. Also alle beiden for-schleifen sollen abrupt stoppen, wenn if true wird. so, wie ichs
dargestellt habe, wird nur die innere for-schleife beendet. sollen aber beide aufhören.ich möchte auch nicht globale variablen verwenden und die schleife dann so konstruieren:
for(int i=0; i<5; ++i)
for(int j=0; j<5; ++j)
if(j==4) break;
if(j==4) break;wie mach ich das am besten???
Danke.
-
- zusätzliche boolsche Flags einführen, oder
- die beiden Schleifen in eine extra-Funktion auslagern, mit return raus, oder
- mit goto
Welche Möglichkeit du wählst, hängt vor allem von den Dogmen, denen du oder der, der den Code beurteilen soll, anhängt, ab.
-
zwei und eins,
vielen dank.
-
Warum nicht so ?
for(int j=0;j<5;++j) { for(int j=0;j<5;++j) { if(j==4) { j=5; break; } } }
Die erste for-Schleife wird dann auch abgebrochen, weil j nicht mehr kleiner 5 ist.
-
Das geht vielleicht doch nicht, weil j vorher wieder zerstört wird. Aber wenn du in der ersten for-Schleife z.B. int i und in der zweiten int j verwendest müsste es gehen.
-
Aber wenn du in der ersten for-Schleife z.B. int i und in der zweiten int j verwendest müsste es gehen.
Das hat <alfred> doch auch gemacht.
oder so:
for (int i = 0; i < 5; ++i) { int j; for (j = 0; j < 5; ++j) { if (j == 4) break; } if (j == 4) break; }
[ Dieser Beitrag wurde am 07.07.2003 um 14:06 Uhr von groovemaster2002 editiert. ]
-
Ist aber natürlich teurer, weil für die äußere Schleife nochmal ein Vergleich durchgeführt werden muss.
Das ist wirklich einer der wenigen Fälle, in denen vielleicht goto angebracht wäre.
Prinzipiell ist aber die Frage, ob Du das ganze nicht anders machen solltest.
Ein Beispiel wie
for (int i = 0; i < 5; ++i) { int j; for (j = 0; j < 5; ++j) { if (j == 4) break; } if (j == 4) break; }
ist zwar rein syntetisch aber man sieht daran, das der Code absolut sinnfrei ist
weil es nix anderes macht alsint i = 0; int j; for (j = 0; j < 5; ++j) { }
Vielleicht solltes Du die beiden schleifen in ne Funktion packen und die Funktion aus der inneren schleife mit einem Return verlassen.
-
Prinzipiell ist aber die Frage, ob Du das ganze nicht anders machen solltest.
Ich glaube das ist auch das entscheidene Argument gegen goto. Zwar scheint das goto hier eine feine Lösung für das Problem zu sein, meist kommt man durch etwas umbauen aber auf eine Lösung, die das Problem erst gar nicht aufkommen lässt.
-
vom einzelfall abgesehen ist das _die_ situtation in der ich goto fuer angebracht halte. schicker ist das natuerlich in java mit den named loops, wo man bei break und continue angeben kann, welche schleife man meint. einer der ganz wenigen schoenen sachen in java.