Schleifen Continue

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Schleifen Continue

    Hallo,

    bin Anfänger und habe eine Frage , kann mir jemand den folgenden Code Zeile für Zeile mal erklären
    habe es aus meinen Übungen und den verstehe ich nicht ganz. Also bitte keine Lösungen wie man es anders machen kann
    möchte den hier verstehen.

    VB.NET-Quellcode

    1. Module Module1
    2. Sub Main()
    3. For i As Integer = 1 To 20
    4. For j As Integer = 1 To i
    5. Console.Write("*")
    6. If j < i Then
    7. Continue For
    8. End If
    9. Console.WriteLine()
    10. Next j
    11. Next i
    12. Console.WriteLine("**")
    13. Console.WriteLine("**")
    14. Console.WriteLine("**")
    15. End Sub
    16. End Module


    Vielen Dank im voraus

    elo63

    Edit by der_Kurt:
    * VB-Tags eingefügt *

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()

    Nächtes mal wie oben schon geschrieben den VB-Tag nutzen. Das geht mit

    Quellcode

    1. [code=vbnet] Code
    [/code]

    VB.NET-Quellcode

    1. Module Module1
    2. Sub Main()
    3. For i As Integer = 1 To 20 ' Eine Schelife die bei 1 anfängt, sich solange wiederholt bis i = 20 ist. Jede Runde wird i um 1 erhöht.
    4. For j As Integer = 1 To i ' Eine weitere Schleife die bis zum Wert i geht.
    5. Console.Write("*") ' In diesem Fall wird jedesmla * in die Console schrieben, bis j = i ist.
    6. If j < i Then ' Wenn j kleiner ist als i, dann...
    7. Continue For ' soll die Schleife weiterlaufen.
    8. End If ' If Abfrage Ende
    9. Console.WriteLine() ' Dann wird noch eine leere Zeile in die Console geschrieben
    10. Next j ' und die Schliefe j wiederholt sich, solang j = 1 ist.
    11. Next i ' und die Schliefe i wiederholt sich, solang i = 20 ist.
    12. ' nun werden noch 3 Zeilen geschrieben.
    13. Console.WriteLine("**")
    14. Console.WriteLine("**")
    15. Console.WriteLine("**")
    16. End Sub ' Ende und die Console schließt sich...
    17. End Module
    Hallo,

    sorry aber das mit den Tags habe ich nicht verstanden und das was Du netter-weise im Kommentar
    immer dahinter geschrieben hast das war mir einigermaßen klar aber nicht warum dann der halbe
    Baum als Ergebnis raus kommt. Denn wie kommt es das die nächste Zeile immer um ein stern weiter geht,
    das verstehe ich irgendwie nicht so richtig, bin halt echter Anfänger.

    Also bei den Code den Du beschrieben hattes nehmen wir als Anfang an i ist 1 dann wird laut zeile 7
    ein * ausgegeben das ist OK dann trifft Zeile 8 nicht zu also wird Zeile 11 ausgeführt eine neue Zeile
    schreiben auch noch OK.

    Also wir haben bis jetzt

    *
    neue Zeile

    In Zeile 12 wird aber j um 1 erhöht und was jetzt. In Zeile 6 geht es doch nicht weiter dann.




    Hatte den Code auch nochmal mit Exit For verstehe ich auch nicht ganz
    was die einzelnen Zeilen machen verstehe ich schon, aber ich komme Theoretisch nicht
    über meine 2 Sterne weg.

    Sub
    Main()
    For i As Integer = 1 To 20
    For j As Integer = 1
    To i
    Console.Write("*")
    If i = j Then

    Console.WrireLine()


    Exit For

    End If
    Next j
    Next i


    Vielen Dank im voraus

    und sorry das mit den Tags ist mir wie gesagt noch
    nicht ganz klar, deswegen nochmal so eingefügt.


    elo63

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „elo63“ ()

    Hallo,

    hoffe mit den Tag ist es jetzt richtig.
    Habe den Code so geändert das man den Inhalt der
    Zähler (Variablen) erkennen kann.

    Die Exit verstehe ich jetzt auch, die innere Schleife fängt immer wieder bei 1 an, dann ist es zu verstehen und Exit springt hinter
    ger next j raus alles OK.

    Aber die Continue verstehe ich noch nicht ganz wo springt Continue For denn hin.

    mfg

    elo63



    VB.NET-Quellcode

    1. Module Module1
    2. Sub Main()
    3. For i As Integer = 1 To 5
    4. For j As Integer = 1 To i
    5. Console.Write("i={0} ", i)
    6. Console.Write("j={0} ", j)
    7. Console.Write("* ")
    8. If j < i Then
    9. Continue For
    10. End If
    11. Console.WriteLine()
    12. Next j
    13. Next i
    14. Console.WriteLine("**")
    15. Console.WriteLine("**")
    16. Console.WriteLine("**")
    17. End Sub
    18. End Module
    Continue For springt wieder zum Anfang der For Schleife, obwohl das technisch gesehen wahrscheinlich nicht stimmt.
    Es ist so, als ob das Ende der Schleife erreicht worden wäre.

    Siehe dieses Beispiel:

    VB.NET-Quellcode

    1. For i As Integer = 0 To 15
    2. Console.WriteLine(i.ToString)
    3. Next

    Was passiert hier?
    Zeile 1 ist der Anfang der Schleife. Er sagt aus, dass der Block innerhalb der Schleife ausgeführt wird, mit diesen Bedingungen:
    • Beim ersten Durchgang hat i den Wert 0
    • Beim Ende des Durchganges wird i um eins erhöht.
    • i wird Werte von einschließlich 0 bis einschließlich 15 annehmen.

    Darum also wird die Ausgabe das sein:
    Spoiler anzeigen

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15


    Bauen wir das Ganze um:

    VB.NET-Quellcode

    1. For i As Integer = 0 To 15
    2. Console.WriteLine(i.ToString)
    3. If Bedingung Then
    4. Continue For
    5. End If
    6. Next


    Ich habe hier einfach "Bedingung" geschrieben, weil es nicht so wichtig ist.

    Angenommen i ist im Moment 8 und die Bedingung ist wahr:
    1. Zeile 2 wird ausgeführt: "8" wird ausgegeben
    2. Zeile 3: Die Bedingung wird überprüft (in diesem Fall wahr)
    3. Zeile 4 wird ausgeführt: Es wird (technisch gesehen) zu Zeile 6 gesprungen
    4. i wird um 1 erhöht, ist jetzt also 9
    5. Es wird zu Zeile 2 gesprungen


    Continue For verhält sich so wie das Ende der Schleife.
    Wenn Continue For ausgeführt wird passiert im Groben und Ganzen das Selbe wie wenn das Schleifenende (Next) erreicht wird.


    PS: Den Variablennamen nach Next zu schreiben (also "Next i") ist nicht erforderlich.

    Weiß jemand woher das kommt?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:

    Continue For verhält sich so wie das Ende der Schleife.
    Ich finde die Erklärung etwas verwirrend. Darf ich präzisieren?
    Continue For verhält sich wie das Ende des momentanen Schleifendurchlaufs und geht zum nächsten Schleifenschritt, also VOR das Next.
    Exit For verhält sich wie das Ende der Schleife und geht auf den Code NACH Next.

    Den Variablennamen nach Next zu schreiben (also "Next i") ist nicht erforderlich.
    Weiß jemand woher das kommt?
    Microsoft sagt dazu
    Sie können counter in der Next-Anweisung optional angeben. Dies verbessert die Lesbarkeit des Programms, besonders, wenn Sie For-Schleifen geschachtelt haben. Sie müssen dieselbe Variable angeben, die in der entsprechenden For-Anweisung vorhanden ist.
    Das kommt wohl noch aus alten BASIC-Zeiten.
    Diese Sprache entstand zu einer Zeit, als häufig noch in FORTRAN oder ALGOL programmiert wurde; Sprachen die zur Lochkartenzeit entstanden.
    Auf Lochkarten konnte aufgrund der Beschränkung von 80 (bzw. 72) Zeichen pro Zeile die heute übliche Einrückung der Struktur nicht durchgeführt werden, weshalb zu besseren Übersicht das Schleifenende mit der Zählvariable ergänzt wurde.

    :D
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --