Abbrechen von verschachtelten Schleifen
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 2 von 68.
Beim Arbeiten mit verschachtelten Schleifen beendet eine reguläre break-Anweisung nur die innerste Schleife. Go bietet jedoch Labels an, die es ermöglichen, direkt aus äußeren Schleifen auszubrechen, was eine präzise Kontrolle über komplexe Schleifenstrukturen ermöglicht.
Ein Label ist ein Bezeichner, gefolgt von einem Doppelpunkt, den Sie vor einer Schleife platzieren. Sie können dann break gefolgt vom Labelnamen verwenden, um diese spezifische Schleife zu verlassen, selbst 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 wird, wenn die Bedingung i == 1 && j == 1 erfüllt ist, durch break outer sowohl die innere als auch die äußere Schleife sofort beendet. Dies ist besonders nützlich bei der Suche in 2D-Datenstrukturen, wenn Sie die Suche vollständig abbrechen möchten, sobald Sie das Gesuchte gefunden haben.
Aufgabe
EinfachIn dieser Herausforderung übst du die Verwendung markierter break-Anweisungen, um verschachtelte Schleifen beim Durchsuchen eines 2D-Rasters zu verlassen. 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 Dimensionen des Rasters im Format
"rows,cols"darstellt (z. B."3,4") - Eine Zeichenfolge, die die zu suchende Zielzahl darstellt (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:
- Die Dimensionen aus der ersten Eingabe zu analysieren, um zu bestimmen, wie viele Zeilen und Spalten durchsucht werden sollen
- Die Zielzahl aus der zweiten Eingabe zu analysieren
- Verschachtelte Schleifen mit einem markierten
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 markierten break zu verlassen - Wenn du die Suche abschließt, ohne die Zielzahl zu finden,
"Target [target] not found"auszugeben
Die Position sollte mithilfe einer 0-basierten Indizierung angegeben werden (die erste Zeile ist 0, die erste Spalte ist 0).
ERFORDERLICHES AUSGABEFORMAT:Probier es selbst
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
// Eingabe lesen
var dimensions string
var targetStr string
fmt.Scanln(&dimensions)
fmt.Scanln(&targetStr)
// Dimensionen parsen
dimParts := strings.Split(dimensions, ",")
rows, _ := strconv.Atoi(dimParts[0])
cols, _ := strconv.Atoi(dimParts[1])
// Zielzahl parsen
target, _ := strconv.Atoi(targetStr)
// Vordefiniertes Gitter
grid := [][]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
}
// TODO: Schreiben Sie Ihren Code unten
// Verwenden Sie verschachtelte Schleifen mit einem benannten 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