Frage

In einer C# (fühlen Sie sich frei, Sie zu beantworten für andere Sprachen) Schleife, was ist der Unterschied zwischen Pause und weiter als Mittel, die Organisation zu verlassen der Schleife, und gehen Sie auf die nächste iteration?

Beispiel:

foreach (DataRow row in myTable.Rows)
{
    if (someConditionEvalsToTrue)
    {
        break; //what's the difference between this and continue ?
        //continue;
    }
}
War es hilfreich?

Lösung

break beenden Sie die Schleife vollständig, continue nur skip die aktuelle iteration.

Zum Beispiel:

for (int i = 0; i < 10; i++) {
    if (i == 0) {
        break;
    }

    DoSomeThingWith(i);
}

Die Pause wird verursachen die Schleife zu beenden, die auf der ersten iteration - DoSomeThingWith werden nie ausgeführt.Diese hier:

for (int i = 0; i < 10; i++) {
    if(i == 0) {
        continue;
    }

    DoSomeThingWith(i);
}

Nicht ausführen DoSomeThingWith für i = 0, aber die Schleife wird weiter und DoSomeThingWith durchgeführt werden, i = 1 zu i = 9.

Andere Tipps

Ein wirklich einfacher Weg, dies zu verstehen, ist die Wort "Schleife" nach einzelnen keywords.Konditionen machen Sinn, wenn Sie genau Lesen, wie die alltäglichen Redewendungen.

break Schleife - Schleife ist unterbrochen und Stoppt.

continue Schleife - Schleife weiterhin ausgeführt, mit der nächsten iteration.

Pause Ursachen der Programm-Zähler, um zu springen aus dem Geltungsbereich der innersten Schleife

for(i = 0; i < 10; i++)
{
    if(i == 2)
        break;
}

Wie das funktioniert

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto BREAK;
}
BREAK:;

weiter springt an das Ende der Schleife.In einer for-Schleife, continue springt zum increment-Ausdruck.

for(i = 0; i < 10; i++)
{
    if(i == 2)
        continue;

    printf("%d", i);
}

Wie das funktioniert

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto CONTINUE;

    printf("%d", i);

    CONTINUE:;
}

break aufhören würde die foreach Schleife vollständig, continue würde überspringen, um die nächste DataRow.

Früher habe ich immer verwirrt, ob ich verwenden soll, break oder continue.Dies ist, was mir hilft, denken Sie daran:

Bei der Verwendung break vs continue?

  1. Pause - es ist wie oben zu brechen.Es ist traurig, Ihr seid Abschied.

Break

  1. Weiter - bedeutet, dass Sie sind gonna geben heute eine Pause ein und Sortieren Sie alle morgen (alsoüberspringen Sie die aktuelle iteration)!

Continue

Es gibt mehr als ein paar Leute, die nicht wie break und continue.Die neueste Beschwerde, die ich sah über Sie war in JavaScript:Die Gute Teile von Douglas Crockford.Aber ich finde, dass manchmal mit einer von Ihnen wirklich vereinfacht die Dinge, besonders wenn Ihre Sprache nicht gehören do-while oder do-until Stil Schleife.

Ich Neige dazu, verwenden Sie break in Schleifen, die auf der Suche eine Liste für etwas.Einmal gefunden, gibt es keinen Punkt in der Weiterbildung, so dass Sie könnte genauso gut beenden.

Ich benutze continue wenn etwas zu tun mit die meisten Elemente einer Liste, aber immer noch wollen, zu überspringen ein paar.

Die break Anweisung kommt auch in praktisch, wenn das polling-Verfahren für eine gültige Antwort-von jemandem oder etwas.Statt:

Ask a question
While the answer is invalid:
    Ask the question

Könntest du eliminieren einige Vervielfältigung und Nutzung:

While True:
    Ask a question
    If the answer is valid:
        break

Die do-until Schleife, die ich bereits erwähnt habe, ist die elegantere Lösung für dieses spezielle problem:

Do:
    Ask a question
    Until the answer is valid

Keine Vervielfältigung und kein break erforderlich.

Alle haben eine sehr gute Erklärung.Ich bin immer noch die Veröffentlichung meiner Antwort nur zu geben ein Beispiel, wenn, die helfen können.

// break statement
for (int i = 0; i < 5; i++) {
    if (i == 3) {
        break; // It will force to come out from the loop
    }

    lblDisplay.Text = lblDisplay.Text + i + "[Printed] ";
}

Hier ist die Ausgabe:

0[Gedruckt] 1[Gedruckt] 2[Gedruckte]

So 3[Gedruckt] & 4[Gedruckt] werden nicht angezeigt, da es zu brechen, wenn i == 3

//continue statement
for (int i = 0; i < 5; i++) {
    if (i == 3) {
        continue; // It will take the control to start point of loop
    }

    lblDisplay.Text = lblDisplay.Text + i + "[Printed] ";
}

Hier ist die Ausgabe:

0[Gedruckt] 1[Gedruckt] 2[Gedruckt] 4[Gedruckte]

So 3[Gedruckt] werden nicht angezeigt, da es weiterhin, wenn i == 3

Pause

Pause erzwingt eine Schleife zu beenden, sofort.

Weiter

Dies macht das Gegenteil zu brechen.Stattdessen beendet die Schleife sofort loops wieder, überspringen Sie den rest des Codes.

Durch Beispiel

foreach(var i in Enumerable.Range(1,3))
{
    Console.WriteLine(i);
}

Druckt 1, 2, 3 (in separaten Zeilen).

Fügen Sie eine break-Bedingung bei i = 2

foreach(var i in Enumerable.Range(1,3))
{
    if (i == 2)
        break;

    Console.WriteLine(i);
}

Nun die Schleife druckt 1 und Stoppt.

Ersetzen Sie die Pause mit einem weiter.

foreach(var i in Enumerable.Range(1,3))
{
    if (i == 2)
        continue;

    Console.WriteLine(i);
}

Jetzt Schleife druckt 1 und 3 (skipping 2).

So break die Schleife Stoppt, während continue springt zum nächsten iteration.

Ruby ist leider ein bisschen anders.PS:Meine Erinnerung ist ein bisschen verschwommen auf diese also entschuldige mich, wenn ich falsch bin,

anstelle des Pause/weiter, hat Sie Pause/weiter, die dasselbe Verhalten in Bezug auf loops

Schleifen (wie alles andere) sind Ausdrücke, und "return" das Letzte, was Sie getan haben.Die meisten der Zeit, immer den Rückgabewert von einer Schleife sinnlos ist, so dass jeder nur tut dies

a = 5
while a < 10
    a + 1
end

Allerdings kann man dies tun

a = 5
b = while a < 10
    a + 1
end # b is now 10

JEDOCH, eine Menge von ruby-code "emuliert" eine Schleife mit einem block.Das kanonische Beispiel ist

10.times do |x|
    puts x
end

Wie ist es viel häufiger für die Menschen zu wollen, Dinge zu tun, mit dem Ergebnis von einem block, und hier wird es chaotisch.Pause/weiter bedeuten verschiedene Dinge in den Kontext eines Blocks.

break springt aus der code, der als block

als Nächstes überspringen Sie den rest des Codes im block, und 'return', was Sie angeben, zu der Aufrufer den block.Dies macht keinen Sinn, ohne Beispiele.

def timesten
    10.times{ |t| puts yield t }
end


timesten do |x|
   x * 2
end
# will print
2
4
6
8 ... and so on


timesten do |x|
    break
    x * 2
end
# won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped

timesten do |x|
    break 5
    x * 2
end
# This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5

timesten do |x|
    next 5
    x * 2
end 
# this would print
5
5
5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5.

So yeah.Rubin ist großartig, aber es hat einige schreckliche Ecke-Fällen.Dies ist die zweite Schlimmste, das ich gesehen habe in meinen Jahren, die es verwenden :-)

Einfache Antwort:

Pause beendet die Schleife sofort.
Weiter beginnt die Verarbeitung des nächsten Elements.(Wenn Sie vorhanden sind, durch einen Sprung auf der Auswertung Linie der für/während)

Bitte lassen Sie mich das offensichtliche:beachten Sie, dass das hinzufügen von weder brechen noch weiter, setzt dein Programm;d.h.Ich gefangen für eine gewisse Fehler, dann nach der Anmeldung, ich wollte, um die Verarbeitung fortzusetzen, und es waren mehr code von Aufgaben zwischen der nächsten Zeile, so dass ich nur lassen Sie es fallen Sie durch.

Zur Pause komplett aus einer foreach-Schleife, Pause verwendet wird;

Zu gehen, um die nächste iteration in der Schleife, weiter verwendet wird;

Pause ist nützlich, wenn Sie die Schleife durch eine Sammlung von Objekten (wie Zeilen in einer Datentabelle) und Sie sind auf der Suche nach einem bestimmten Spiel, wenn Sie feststellen, dass überein, gibt es keine Notwendigkeit, weiterhin durch die restlichen Zeilen, also wollen Sie ausbrechen.

Weiter ist nützlich, wenn Sie erreicht haben, was Sie brauchen, um in der Seite einen loop-iteration.Sie haben normalerweise weiter nach einer wenn.

wenn Sie nicht wollen, zu verwenden Pause Sie erhöhen nur den Wert von I in der Weise, dass Sie es machen iteration condition false und die Schleife wird nicht ausgeführt auf der nächsten iteration.

for(int i = 0; i < list.Count; i++){
   if(i == 5)
    i = list.Count;  //it will make "i<list.Count" false and loop will exit
}

Für andere Sprachen:

'VB
For i=0 To 10
   If i=5 then Exit For '= break in C#;
   'Do Something for i<5
next

For i=0 To 10
   If i=5 then Continue For '= continue in C#
   'Do Something for i<>5...
Next
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top