2.6 Schleifen
Schleifen werden in Programmen häufig benötigt. Sie ermöglichen den mehrfachen Durchlauf von Anweisungen. Darin liegt eine besondere Stärke der Programmierung allgemein: die schnelle wiederholte Bearbeitung ähnlicher Vorgänge. Es gibt die Schleifenstrukturen: Do...Loop, For...Next, For Each...In... und With.
Mithilfe der Strukturen steuern Sie die Wiederholungen eines Anweisungsblocks (die Anzahl der Schleifendurchläufe). Dabei wird der Wahrheitswert eines Ausdrucks (der Schleifenbedingung) oder der Wert eines numerischen Ausdrucks (Wert des Schleifenzählers) benötigt.
Die Schleife For Each...In... wird meist bei Feldern oder Collections (Auflistungen) eingesetzt, siehe Abschnitt 4.5.8. Die Anweisung With dient zur Steuerung einer besonderen Schleife mit nur einem Durchlauf.
2.6.1 For ... Next

Falls die Anzahl der Schleifendurchläufe bekannt oder vor Beginn der Schleife berechenbar ist, sollten Sie die For... Next-Schleife verwenden. Ihr Aufbau sieht wie folgt aus:
For Zähler = Anfang To Ende [ Step Schritt ]
[ Anweisungen ]
[ Exit For ]
[ Anweisungen ]
Next [ Zähler ]
Die Zahlen-Variable Zähler wird zunächst auf den Wert von Anfang gesetzt. Nach jedem Durchlauf wird sie um den Wert von Schritt verändert, also vergrößert oder verkleinert. Falls Step Schritt nicht angegeben wurde, wird die Variable um 1 vergrößert. Der neue Wert von Zähler wird mit dem Wert von Ende verglichen.
- Falls die Schrittweite positiv ist und der Wert von Zähler nicht größer als der Wert von Ende ist, wird die Schleife wiederum durchlaufen.
- Falls die Schrittweite negativ ist und der Wert von Zähler nicht kleiner als der Wert von Ende ist, wird die Schleife ebenfalls wiederum durchlaufen.
- Falls die Schrittweite positiv ist und der Wert von Zähler größer als der Wert von Ende ist oder falls die Schrittweite negativ ist und der Wert von Zähler kleiner als der Wert von Ende ist, wird die Schleife beendet.
Die Anweisung Exit For können Sie einsetzen, um die Schleife aufgrund einer speziellen Bedingung sofort zu verlassen.
In dem folgenden Programm im Projekt ForNext werden durch Aufruf von vier Buttons vier unterschiedliche Schleifen durchlaufen, siehe Abbildung 2.29.
Abbildung 2.29 Verschiedene For-Schleifen
Der Programmcode:
Public Class Form1
Private Sub cmdSchleife1_Click(...) Handles ...
Dim i As Integer
lblA1.Text = ""
For i = 3 To 7
lblA1.Text &= i & vbCrLf
Next
End Sub
Private Sub cmdSchleife2_Click(...) Handles ...
Dim i As Integer
lblA2.Text = ""
For i = 3 To 11 Step 2
lblA2.Text &= i & vbCrLf
Next
End Sub
Private Sub cmdSchleife3_Click(...) Handles ...
Dim i As Integer
lblA3.Text = ""
For i = 7 To 3 Step –1
lblA3.Text &= i & vbCrLf
Next
End Sub
Private Sub cmdSchleife4_Click(...) Handles ...
Dim d As Double
lblA4.Text = ""
For d = 3.5 To 7.5 Step 1.5
lblA4.Text &= d & vbCrLf
Next
End Sub
End Class
Listing 2.22 Projekt »ForNext«
Zur Erläuterung der ersten Schleife:
- Als Zählervariable dient i.
- Die Schleife wird erstmalig mit i = 3 und letztmalig mit i = 7 durchlaufen.
- Es ist keine Schrittweite angegeben, also wird als Schrittweite 1 genommen.
- Statt Next hätte man zur größeren Deutlichkeit auch Next i schreiben können.
Zur Erläuterung der restlichen Schleifen:
- Bei der zweiten Schleife wurde die Schrittweite 2 gewählt.
- Die dritte Schleife läuft abwärts, daher muss eine negative Schrittweite gewählt werden.
- In der vierten Schleife wird gezeigt, dass eine Schleife auch nicht-ganzzahlige Werte durchlaufen kann.
2.6.2 Do ... Loop

Ist die Anzahl der Schleifendurchläufe nicht bekannt bzw. vor Beginn der Schleife nicht berechenbar, so sollten Sie die Do ... Loop-Schleife verwenden. Es gibt sie in fünf verschiedenen Varianten:
- Do While...Loop: Prüft die Bedingung zum Weiterlaufen der Schleife am Anfang der Schleife.
- Do...Loop While: Prüft die Bedingung zum Weiterlaufen der Schleife am Ende der Schleife.
- Do Until...Loop: Prüft die Bedingung zum Abbruch der Schleife am Anfang der Schleife.
- Do...Loop Until: Prüft die Bedingung zum Abbruch der Schleife am Ende der Schleife.
- Do...Loop: Die Bedingung zum Weiterlaufen oder Abbruch der Schleife wird nicht geprüft, daher ist eine Verzweigung in der Schleife und ein Exit Do zur Beendigung der Schleife notwendig.
Der allgemeine Aufbau sieht wie folgt aus:
Do { While | Until } Bedingung
[ Anweisungen ]
[ Exit Do ]
[ Anweisungen ]
Loop
oder
Do
[ Anweisungen ]
[ Exit Do ]
[ Anweisungen ]
Loop { While | Until } Bedingung
Im folgenden Programm im Projekt DoLoop werden alle fünf Möglichkeiten genutzt. Es werden Zahlen addiert, solange die Summe der Zahlen kleiner als 5 ist, siehe Abbildung 2.30. Da die Zahlen durch einen Zufallsgenerator erzeugt werden, ist die Anzahl der Schleifendurchläufe nicht vorhersagbar.
Der Zufallszahlengenerator wird mithilfe der Funktion Rnd() realisiert. Diese liefert quasizufällige Zahlen zwischen 0 und 1. Der Zufallszahlengenerator muss mithilfe der Prozedur Randomize() vor der Benutzung initialisiert werden, da anderenfalls immer die gleichen Zufallszahlen geliefert würden. Die Initialisierung wird pro Programmaufruf einmalig beim Laden des Formulars vorgenommen.
Abbildung 2.30 Bedingungsgesteuerte Schleife
Dieser Zeitpunkt wird durch das Ereignis Load gekennzeichnet. Sie erstellen den Rahmen dieser Ereignisprozedur, indem Sie einen Doppelklick auf einer freien Stelle des Formulars ausführen. Die zugehörige Ereignisprozedur behandelt das Ereignis MyBase.Load. Mit MyBase können Sie auf die Basisklasse der Klasse zugreifen, in der Sie sich befinden; in diesem Fall ist das die Klasse des Formulars Form1. Mehr zum Begriff MyBase finden Sie in Abschnitt 5.8.
Public Class Form1
Private Sub Form1_Load(...) Handles MyBase.Load
Randomize()
End Sub
Private Sub cmdSchleife1_Click(...) Handles ...
Dim Summe As Single
lblAnzeige.Text = ""
Summe = 0
Do While Summe < 5
Summe += Rnd()
lblAnzeige.Text &= Summe & vbCrLf
Loop
lblAnzeige.Text &= "Fertig!"
End Sub
Private Sub cmdSchleife2_Click(...) Handles ...
Dim Summe As Single
lblAnzeige.Text = ""
Summe = 0
Do
Summe += Rnd()
lblAnzeige.Text &= Summe & vbCrLf
Loop While Summe < 5
lblAnzeige.Text &= "Fertig!"
End Sub
Private Sub cmdSchleife3_Click(...) Handles ...
Dim Summe As Single
lblAnzeige.Text = ""
Summe = 0
Do Until Summe >= 5
Summe += Rnd()
lblAnzeige.Text &= Summe & vbCrLf
Loop
lblAnzeige.Text &= "Fertig!"
End Sub
Private Sub cmdSchleife4_Click(...) Handles ...
Dim Summe As Single
lblAnzeige.Text = ""
Summe = 0
Do
Summe += Rnd()
lblAnzeige.Text &= Summe & vbCrLf
Loop Until Summe >= 5
lblAnzeige.Text &= "Fertig!"
End Sub
Private Sub cmdSchleife5_Click(...) Handles ...
Dim Summe As Single
lblAnzeige.Text = ""
Summe = 0
Do
Summe += Rnd()
lblAnzeige.Text &= Summe & vbCrLf
If Summe >= 5 Then Exit Do
Loop
lblAnzeige.Text &= "Fertig!"
End Sub
End Class
Listing 2.23 Projekt »DoLoop«
Zur Erläuterung:
- Im Folgenden wird nur die erste Ereignisprozedur cmdSchleife1_Click() erläutert. Die anderen sind vergleichbar aufgebaut. Auf die unterschiedliche Schleifensteuerung wurde bereits weiter oben eingegangen.
- Der Inhalt des Labels wird von alten Ausgaben gelöscht.
- Die Variable Summe wird zunächst mit dem Wert 0 initialisiert. Dies ist in Visual Basic eigentlich nicht nötig, gehört aber zum guten Programmierstil, da Sie auf diese Weise den Wert der Variablen zu Beginn der Schleife sicherstellen können.
- Zu Beginn der Schleife wird geprüft, ob die Summe der Zahlen kleiner als 5 ist. Trifft dies zu, kann die Schleife durchlaufen werden.Hinweis: Bei einer solchen kopfgesteuerten Schleife (d. h., die Abbruchbedingung wird im Kopf der Schleife geprüft) kann es vorkommen, dass sie niemals durchlaufen wird.
- Der Wert der Variablen Summe wird um eine Zufallszahl zwischen 0 und 1 erhöht.
- Der Inhalt des Labels wird um den aktuellen Wert der Summe und einen Zeilenumbruch verlängert.
- Sie kommen zum Ende der Schleife, zur Anweisung Loop. Sie führt dazu, dass das Programm wieder zu Beginn der Schleife fortsetzt. Es wird wiederum geprüft, ob die Summe der Zahlen kleiner als 5 ist. Sobald dies nicht mehr zutrifft, läuft das Programm hinter der Anweisung Loop weiter.
- Es wird die Ausgabe Fertig! erzeugt.
2.6.3 With

Mithilfe von With führen Sie eine Reihe von Anweisungen für ein einzelnes Objekt durch. Dabei wird der einmal erstellte Bezug zum Objekt mehrfach verwendet. Bei einem längeren Objektnamen ist dies sehr nützlich und übersichtlich. Der Aufbau sieht wie folgt aus:
With Objekt
[ Anweisungen ]
End With
Ein Beispiel im Projekt WithBlock:
Public Class Form1
Private Sub cmdAnzeige_Click(...) Handles ...
With lblAnzeige
.BorderStyle = BorderStyle.Fixed3D
.BackColor = Color.Yellow
.Text = "Test"
.Location = New Point(20, 50)
End With
End Sub
End Class
Listing 2.24 Projekt »WithBlock«
Zur Erläuterung:
- Die Eigenschaften des Labels lblAnzeige werden mithilfe von With geändert.
- Die Eigenschaften Rahmenstil, Hintergrundfarbe, Textinhalt und Position werden nacheinander gesetzt. Dabei muss zu Beginn der Anweisung jeweils nur ein Punkt angegeben werden. Da das Programm sich innerhalb des With-Blocks befindet, ist es klar, auf welches Objekt sich die Änderungen beziehen.
2.6.4 Übungen

Anhand einer Reihe von Übungsaufgaben zu Schleifen (und Verzweigungen) werden im Folgenden einige typische Probleme der Programmierung in Visual Basic trainiert. Der visuelle Teil der Lösung enthält in der Regel nur ein einfaches Textfeld zur Eingabe, einen oder zwei Buttons zum Durchführen der Aufgabe und ein einfaches Label zur Ausgabe.
Übung ÜForNext1
For-Schleife: Schreiben Sie ein Programm mit einer einfachen Schleife, das nacheinander die folgenden Zahlen ausgibt: 35; 32,5; 30; 27,5; 25; 22,5; 20.
Übung ÜForNext2
For-Schleife: Erweitern Sie die vorherige Aufgabe. Am Ende der Zeile sollen Summe und Mittelwert aller Zahlen angezeigt werden, siehe Abbildung 2.31.
Abbildung 2.31 Übung ÜForNext1 und 2
Übung ÜDoLoop
Do...Loop-Schleife: Schreiben Sie ein Programm, mit dessen Hilfe eine eingegebene Zahl wiederholt halbiert und ausgegeben wird. Das Programm soll beendet werden, wenn das Ergebnis der Halbierung kleiner als 0,001 ist, siehe Abbildung 2.32.
Abbildung 2.32 Übung ÜDoLoop
Übung ÜZahlenraten
If...Else: Schreiben Sie ein Programm, mit dem das Spiel Zahlenraten gespielt werden kann: Per Zufallsgenerator wird eine Zahl zwischen 1 und 100 erzeugt, aber nicht angezeigt. Der Benutzer soll so lange Zahlen eingeben, bis er die Zahl erraten hat. Als Hilfestellung soll jedes Mal ausgegeben werden, ob die eingegebene Zahl größer oder kleiner als die zu ratende Zahl ist, siehe Abbildung 2.33.
Abbildung 2.33 Übung ÜZahlenraten
Übung ÜSteuertabelle
For-Schleife, If...Else oder Select Case: Erweitern Sie das Programm aus Übung ÜSteuerbetrag. Schreiben Sie ein Programm, das zu einer Reihe von Gehältern u. a. den Steuerbetrag berechnet und ausgibt. In Tabelle 2.14 sind die Steuersätze angegeben.
Gehalt | Steuersatz |
bis einschl. 12.000 € |
12 % |
von 12.000 bis einschl. 20.000 € |
15 % |
von 20.000 bis einschl. 30.000 € |
20 % |
über 30.000 € |
25 % |
Es sollen für jedes Gehalt von 5.000 € bis 35.000 € in Schritten von 3.000 € folgende vier Werte ausgegeben werden: Gehalt, Steuersatz, Steuerbetrag, Gehalt abzüglich Steuerbetrag. Jedes Gehalt soll mit den zugehörigen Werten in einer eigenen Zeile ausgegeben werden, siehe Abbildung 2.34.
Abbildung 2.34 Übung ÜSteuertabelle
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.