Abbrechen von verschachtelten Schleifen
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 2 von 68.
Bei der Arbeit mit verschachtelten Schleifen beendet eine gewöhnliche break-Anweisung nur die innerste Schleife. Go bietet jedoch Labels, mit denen du direkt aus äußeren Schleifen ausbrechen kannst und so präzise Kontrolle über komplexe Schleifenstrukturen erhältst.
Ein Label ist ein Bezeichner, auf den ein Doppelpunkt folgt und den du vor einer Schleife platzierst. Anschließend kannst du break gefolgt vom Namen des Labels verwenden, um genau diese Schleife zu verlassen, auch aus verschachtelten Schleifen heraus.
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 1 {
break outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
}In diesem Beispiel beendet break outer sowohl die innere als auch die äußere Schleife sofort, wenn die Bedingung i == 1 && j == 1 erfüllt ist. Das ist besonders nützlich, wenn du 2D-Datenstrukturen durchsuchst und die Suche vollständig abbrechen möchtest, sobald du gefunden hast, wonach du suchst.
Aufgabe
EinfachIn dieser Herausforderung übst du, beschriftete break-Anweisungen zu verwenden, um verschachtelte Schleifen zu verlassen, während du ein 2D-Raster durchsuchst. Du musst eine bestimmte Zielzahl im Raster finden und die Suche sofort beenden, sobald du sie gefunden hast.
Du erhältst zwei Eingaben:
- Eine Zeichenfolge, die die Abmessungen des Rasters im Format
"rows,cols"angibt (z. B."3,4") - Eine Zeichenfolge, die die gesuchte Zielzahl angibt (z. B.
"7")
Das folgende 2D-Raster mit Zahlen wird dir bereitgestellt:
grid := [][]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
}Deine Aufgabe ist es:
- Die Werte zu verwenden, die im Code oberhalb deiner Lösung bereits eingelesen wurden:
rowsundcols(wie viel vom Raster durchsucht werden soll),targetundgrid - Verschachtelte Schleifen mit einem beschrifteten
breakzu verwenden, um das Raster zu durchsuchen - Wenn du die Zielzahl findest,
"Found [target] at position ([row], [col])"auszugeben und beide Schleifen sofort mithilfe des beschrifteten break zu verlassen - Wenn du die Suche abschließt, ohne die Zielzahl zu finden,
"Target [target] not found"auszugeben
Die Position sollte mit einer bei 0 beginnenden Indizierung angegeben werden (die erste Zeile ist 0, die erste Spalte ist 0).
Probier es selbst
// TODO: Schreibe deinen Code unten
// Verwende verschachtelte Schleifen mit einem gelabelten break, um nach dem Ziel zu suchen
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und VerhaltenÜbe selbstständig: Online-Go-Compiler