Verschachtelte Schleifen
Teil des Abschnitts Grundlagen der GO-Journey von Coddy. Lektion 49 von 109.
Verschachtelte Schleifen sind Schleifen, die sich innerhalb einer anderen Schleife befinden. Die innere Schleife wird bei jeder Iteration der äußeren Schleife vollständig ausgeführt.
Erstellen wir mithilfe verschachtelter Schleifen eine Multiplikationstabelle für die Zahlen 1–3:
rows := 3
cols := 3
for i := 1; i <= rows; i++ {
for j := 1; j <= cols; j++ {
fmt.Printf("%d×%d=%d\t", i, j, i*j)
}
fmt.Println()
}Nach der Ausführung dieses Codes erhalten wir eine Multiplikationstabelle, in der jede Zeile einen Wert der Variablen der äußeren Schleife (i) multipliziert mit allen Werten der Variablen der inneren Schleife (j) darstellt. Die Ausgabe wird auf dem Bildschirm angezeigt:
1×1=1 1×2=2 1×3=3
2×1=2 2×2=4 2×3=6
3×1=3 3×2=6 3×3=9 Schauen wir uns Schritt für Schritt an, wie das funktioniert:
Zuerst setzt die äußere Schleife i=1, und die innere Schleife wird vollständig durchlaufen:
i=1, j=1: prints "1×1=1"
i=1, j=2: prints "1×2=2"
i=1, j=3: prints "1×3=3"Nachdem die innere Schleife beendet ist, geben wir mit fmt.Println() eine neue Zeile aus.
Dann setzt die äußere Schleife i=2, und die innere Schleife beginnt erneut, wobei j wieder bei 1 startet:
i=2, j=1: prints "2×1=2"
i=2, j=2: prints "2×2=4"
i=2, j=3: prints "2×3=6"Schließlich setzt die äußere Schleife i=3, und die innere Schleife wird ein letztes Mal ausgeführt:
i=3, j=1: prints "3×1=3"
i=3, j=2: prints "3×2=6"
i=3, j=3: prints "3×3=9"Jede Schleife hat ihren eigenen Zähler (i und j), und rows und cols ändern sich nie: Sie geben den Schleifen lediglich an, wann sie anhalten sollen. Dieses Muster ist sehr nützlich, um mit Datentabellen zu arbeiten oder gitterartige Strukturen zu erstellen.
Aufgabe
AnfängerIn dieser Herausforderung übst du, verschachtelte Schleifen zu verwenden, um ein einfaches Muster auszugeben. Die äußere Schleife durchläuft die Zeilen, und die innere Schleife durchläuft die Spalten, um ein kleines Raster aus Zeichen zu erstellen.
Vervollständige die verschachtelten Schleifen, um ein 3x3-Raster aus Sternchen (*) auszugeben. Auf jedes Sternchen muss ein Leerzeichen folgen, sodass jede Zeile wie * * * aussieht (mit einem abschließenden Leerzeichen). Die erwartete Ausgabe ist:
* * * * * * * * *
Verwende für jede Schleife einen eigenen Zähler (zum Beispiel i für die Zeilen und j für die Sterne in einer Zeile) und vergleiche ihn mit rows oder columns. Ändere nicht rows und columns selbst: Jede Zeile benötigt erneut columns.
Probier es selbst
package main
import "fmt"
func main() {
// Anzahl der Zeilen und Spalten in unserem Raster
rows := 3
columns := 3
// TODO: Erstelle eine verschachtelte Schleife, um ein Raster aus Sternchen (*) auszugeben
// Die äußere Schleife sollte über die Zeilen iterieren
// Die innere Schleife sollte über die Spalten iterieren
for i := 0; i < rows; i++ {
// Füge hier deine innere Schleife ein, um in jeder Spalte Sternchen auszugeben
// Dies gibt nach jeder Zeile einen Zeilenumbruch aus
fmt.Println()
}
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
4Vergleichs- und logische Operatoren
Vergleichsoperatoren – Teil 1Vergleichsoperatoren – Teil 2Logischer UND-OperatorLogischer ODER-OperatorLogischer NICHT-OperatorGrundlagen der OperatorrangfolgeZusammenfassung – Vergleiche durchführen7Kontrollfluss: Schleifen
Die `for`-Schleife erklärt`for`-Schleife – Grundlagen`for`-Schleife – nur BedingungDas Schlüsselwort `break`Das Schlüsselwort `continue`Verschachtelte SchleifenWiederholung – Aktionen wiederholen2Variablen und grundlegende Datentypen
Was ist eine VariableTypinferenz mit `:=`Ganzzahlen (int)GleitkommazahlenBoolesche WerteZeichenkettenNullwerteKonstantenNamenskonventionenRückblick – Variablen und Typen5Grundlegende Ein- und Ausgabe
Formatierte AusgabeFormatierungsverbenDatentypen ausgebenGrundlegende Benutzereingaben erhaltenRückblick – Ein- und Ausgabe8Funktionen
Funktionen verstehenEine Funktion deklarierenFunktionen aufrufenFunktionsparameterEinen einzelnen Wert zurückgebenMehrere Werte zurückgebenBenannte RückgabewerteGrundlagen des FunktionsumfangsRückblick – Wiederverwendbaren Code erstellen3Grundlegende Operatoren
Arithmetische OperatorenDivisionsoperatorDer Modulo-OperatorZuweisungsoperatorErweiterte ZuweisungsoperatorenInkrement und DekrementRückblick – Berechnungen6Kontrollfluss: Bedingungen
Die `if`-AnweisungDas `else`-SchlüsselwortDas `else if`-SchlüsselwortVariablen-Shadowing in `if`Variablen initialisierenDie `switch`-AnweisungSwitch mit AusdrückenSwitch ohne AusdruckDas `fallthrough`-SchlüsselwortZusammenfassung – Entscheidungen treffen9Zeiger
Was ist ein Zeiger?Zeigervariablen deklarierenDer AdressoperatorZeiger dereferenzierenZeiger in Funktionen verwendenNil-ZeigerRückblick – Zeiger verstehen12Zusammengesetzte Datentypen: Maps
Einführung in MapsMap-Literale deklarierenMaps mit `make` erstellenSchlüssel-Wert-Paare hinzufügen und aktualisierenAuf Map-Werte zugreifenDas Vorhandensein eines Schlüssels prüfenMap-Einträge löschenLänge von MapsMaps durchlaufenZusammenfassung – Schlüssel-Wert-SpeicherungÜbe selbstständig: Online-Go-Compiler