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 2 Übungen und den verstehe ich nicht ganz. Also bitte keine Lösungen wie man es anders machen kann möchte die hier verstehen. Die Zeilen was die einzeln machen verstehe ich auch, aber nicht warum dann ein Baum am Ende dabei raus kommt denn
ich bleibe Theoretisch immer bei 2 Sternen das meinte ich mit Erklären.
Module Module1
Sub Main()
For i As Integer = 1 To 20
For j As Integer = 1 To i
Console.Write("*")
If j Continue For
End If
Console.WriteLine()
Next j
Next i
Console.WriteLine("**")
Console.WriteLine("**")
Console.WriteLine("**")
End Sub
End Module
Hier der zweite den verstehe ich bis das der 3 Stern gemacht werden soll, den da kommen bei mir
wieder nur 2 Sterne raus Theoretisch, als Programm funktionieren beide einwandfrei.
Nur das Theoretische nachvollziehen klappt nicht so ganz.
Module Module1
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
Console.WriteLine("**")
Console.WriteLine("**")
Console.WriteLine("**")
End Sub
End Module
Vielen Dank im voraus
elo
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Ich kann es ja mal versuchen
Sub Main()
For i As Integer = 1 To 20
i erhlt den Wert 1
For j As Integer = 1 To i
j erhält ebenfalls den Wert 1, danach wird wegen
Console.Write("*")
ein * ausgegeben.
If j <i Then
Continue For
End If
Wenn j < i dann mache in der FOR-Schleife (der zweiten!) weiter. Da das nicht der Fall ist (i=1 und j=1 > 1=1) geht es weiter mit
Console.WriteLine()
was lediglich eine Zeilenschaltung durchführt.
Next j
zählt den Schleifenzähler der zweiten Schleife eigentlich eines höher - der ist aber schon am ende (j=1) also geht es weiter mit
Next i
damit wird i=2.
Dann geht es wieder in die zweite Schleife - die beginnt von vorne, also j=1.
es wird ein * ausgegeben, dann ergibt der Vergleich IF j wahr, daher wird direkt zum "Next j" gesprungen und ausgeführt - j=2, also der nächste Stern ausgegeben.
Jetz ergibt der Vergleich j false, daher direkter Übergang zum End If
das Next j wird nicht ausgeführt, da j sein ende erreicht hat.
Hingegen wird mit Next i
i=3
Wieder Sprung in die zweite Schleife - die wieder von vorn beginnt: (und diesmal dreimal durchlaufen wird)
usw.
Wichtig ist, dass dir klar wird, dass die innere FOR Schleife bei jedem Durchgang bei 1 beginnt.
Über den Rest (z.B. das meines Erachtens der IF Vergleich nicht nötig ist) reden wird lieber nicht - die ist auch nur da, um den Gebrauch von Continue For zu erklären.
Bei der Zweiten Routine ist es ähnlich - wenn du dir den Vergleich anschaust dann wird dir klar, dass die nur genau andersherum arbeitet.
Volker
Volker
Ein solcher Erklärungsversuch wie im vorliegenden Beispiel stiftet aber leider viel mehr Verwirrung als Klarheit :-|
Wobei der Einsatz von Continue und Exit sowieso nur sehr zurückhaltend erfolgen sollte weil die Lesbarkeit und Nachvollziehbarkeit des Codes dadurch deutlich leidet.
Gruß
bor
richtig - weshalb ich auch nicht nachvollziehen kann, warum das Beispiel gewählt wurde.
Es gibt deutlich sinnvollere Beispiele.
Wobei der Einsatz von Continue und Exit sowieso nur sehr zurückhaltend erfolgen sollte weil die Lesbarkeit und Nachvollziehbarkeit des Codes dadurch deutlich leidet.
Ebenfalls richtig.
Volker
Hallo,
vielen Dank für die Erklärung so ähnlich hatte ich es mir gedacht.
Das eine was man wissen muss ist das die innere Schleife wieder bei 1 anfängt und wohin die Continue und Exit springen
das andere ist eigentlich klar.
mfg
elo
Richtig.
Der CONTINUE FOR springt auf sein zugehöriges "Next .. ", d.h. er macht mit dem nächsten Wert der Schleife weiter
Der EXIT FOR springt *dahinter*, er verlässt die Schleife.
Volker