Webhosting, Domains und VServer von Host Europe

Forum: Programmieren - alles kontrollieren 19.638 Beiträge

Elo

VB Schleifen Exit Continue

Elo / 5 Antworten / Baumansicht
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 < i Then
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
Benachrichtigung bei Reaktionen
Optionen
neanderix Elo

„VB Schleifen Exit Continue“

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
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
Benachrichtigung bei Reaktionen
Optionen
Borlander neanderix

„Ich kann es ja mal versuchen Sub Main For i ...“

die ist auch nur da, um den Gebrauch von Continue For zu erklären.
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
Benachrichtigung bei Reaktionen
Optionen
neanderix Borlander

„die ist auch nur da, um den Gebrauch von ...“

Ein solcher Erklärungsversuch wie im vorliegenden Beispiel stiftet aber leider viel mehr Verwirrung als Klarheit :-|

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
Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
Benachrichtigung bei Reaktionen
Optionen
Elo neanderix

„Ich kann es ja mal versuchen Sub Main For i ...“

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
Benachrichtigung bei Reaktionen
Optionen
neanderix Elo

„Hallo, vielen Dank für die Erklärung so ...“

Das eine was man wissen muss ist das die innere Schleife wieder bei 1 anfängt und wohin die Continue und Exit springen

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
Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
Benachrichtigung bei Reaktionen
nach oben
0.036103