Brechen verschachtelte Schleifen

8

Kann mir jemand sagen, wie ich die Hauptschleife unterbrechen soll, wenn ich Schleifen verschachtelt habe?
Beispiel *:

%Vor%

* Dieser Code tut nichts, es ist nur ein Beispiel

Was sollte ich an die Stelle des Kommentars "Pause Hauptschleife" setzen? In Java gibt es Labels, die ich kaputt machen kann (wenn ich ein Label auf die Hauptschleife "MainLoop" setze, kann ich "break MainLoop;" schreiben und es wird gültig), aber was kann ich hier tun?

Danke im Rat!

    
Bankin 13.12.2011, 22:39
quelle

13 Antworten

17

goto !

Ich verstehe dieses persistente Mem nicht, das besagt, dass goto als "schädlich" angesehen wird. Wenn es richtig verwendet wird, ist es sehr mächtig, und das ist ein solcher Fall.

    
fge 13.12.2011 22:43
quelle
10
  • refactor, so dass Sie auf diese Weise keine verschachtelten Schleifen beenden müssen.
    Die Verwendung von return ist oft möglich, indem die Schleifen in eine separate Funktion gesetzt werden.
  • benutze goto .
  • Benutze eine Flagge (hässlich)
CodesInChaos 13.12.2011 22:42
quelle
7

Verwenden Sie eine Markierung, um die Beendigung zu signalisieren:

%Vor%     
Tudor 13.12.2011 22:42
quelle
4

Einige Leute würden mich erschießen, weil sie die Verwendung der goto -Anweisung vorgeschlagen haben, aber das Aufbrechen mehrerer Schleifen ist einer der Orte, an denen sie sehr nützlich (und effizient) sein kann:

%Vor%     
Matt Lacey 13.12.2011 22:42
quelle
3

oft ist es besser, dies in eine separate Funktion zu setzen und dann eine "Rückkehr"

zu machen %Vor%     
Keith Nicholas 13.12.2011 22:42
quelle
2

Ich weiß nicht, ob es eine Möglichkeit gibt, in C # aus verschachtelten Schleifen auszubrechen, aber erlaube mir, eine Umgehungslösung vorzuschlagen.

Sie könnten die Hauptschleife in eine Funktion werfen und von dieser Funktion zurückkehren. Sie können return false; angeben, um einen vorzeitigen Abbruch anzuzeigen, und return true; , um anzuzeigen, dass die Schleife den ganzen Weg durchlaufen hat, wenn das wichtig ist.

    
Platinum Azure 13.12.2011 22:43
quelle
2

Flags, wie in den Kommentaren vorgeschlagen, sind wahrscheinlich die beste Methode:

%Vor%     
Jon 13.12.2011 22:43
quelle
0
%Vor%     
Hogan 13.12.2011 22:42
quelle
0

Es gibt keine gute generische Antwort. Der richtige Weg hängt vom wirklichen Problem ab. Der beste Weg könnte sein, die äußere Schleife in eine Funktion zu setzen und dann return; zu verwenden, um daraus auszubrechen. Es könnte x=100; y=100; sein. Es könnte done=true; sein. Verdammt, es könnte sogar goto (Scherz) sein.

    
David Schwartz 13.12.2011 22:43
quelle
0

Nicht empfehlenswert, aber Sie können goto verwenden. Siehe dies .

%Vor%

Nicht empfohlen, weil dadurch der Fluss schwieriger zu verstehen ist. Andere Option ist natürlich, eine Flagge in der inneren Schleife zu setzen und es in der äußeren Schleife zu überprüfen, ich habe das als offensichtlich hingenommen und nehme an, dass Sie es sowieso wissen ..:)

    
Kashyap 13.12.2011 22:44
quelle
0

Da Sie, wie Sie bereits erwähnt haben, keine Bezeichnungen für den Befehl break haben, können Sie Folgendes tun:

%Vor%     
Mike Christensen 13.12.2011 22:45
quelle
0

Wie andere gesagt haben, hängt die "richtige" Antwort von dem Problem ab, das Sie lösen. Wenn du kannst, ist es die bevorzugte Route, sie in kleinere Stücke aufzuteilen. Etwas an diesem Modell:

%Vor%

Meiner Meinung nach ist es in unterschiedlichem Maße hässlich, mehrere Return-Anweisungen von einer einzigen Funktion zu erhalten, zusätzliche Flags zu verwenden oder ( shudder ) GOTOs zu verwenden. Aber manchmal ist eine davon notwendig.

Bearbeiten: Dies demonstriert, wie Sie mit dieser Methode ein nützliches Objekt einer Art zurückgeben, das Sie "Kunde" oder "IDataAccess" oder "bool" oder etwas anderes als "object" haben Rückgabetypen, wenn diese für real verwendet werden.

    
That Chuck Guy 13.12.2011 23:01
quelle
0

Ich habe LINQ verwendet, um zuerst die interessanten Objekte zu sammeln, und dann die Operationen an den Ergebnissen der LINQ-Abfrage durchgeführt. Dadurch werden verschachtelte Schleifen entfernt und durch eine Schleife ersetzt.

    
flobadob 27.08.2015 13:56
quelle

Tags und Links