Menu
Coddy logo textTech

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.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

challenge icon

Aufgabe

Einfach

In dieser Herausforderung üben Sie die Verwendung von benannten break-Anweisungen, um verschachtelte Schleifen beim Durchsuchen eines 2D-Gitters zu verlassen. Sie müssen eine bestimmte Zielzahl im Gitter finden und die Suche sofort beenden, sobald Sie diese gefunden haben.

Sie erhalten zwei Eingaben:

  • Einen String, der die Dimensionen des Gitters im Format "rows,cols" darstellt (z. B. "3,4")
  • Einen String, der die gesuchte Zielzahl darstellt (z. B. "7")

Ihnen wird das folgende 2D-Gitter aus Zahlen zur Verfügung gestellt:

grid := [][]int{
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
}

Ihre Aufgabe ist es:

  1. Die Dimensionen aus der ersten Eingabe zu parsen, um zu bestimmen, wie viele Zeilen und Spalten durchsucht werden sollen
  2. Die Zielzahl aus der zweiten Eingabe zu parsen
  3. Verschachtelte Schleifen mit einem benannten break zu verwenden, um das Gitter zu durchsuchen
  4. Wenn Sie die Zielzahl finden, geben Sie "Found [target] at position ([row], [col])" aus und verlassen Sie sofort beide Schleifen mit dem benannten Break
  5. Wenn Sie die Suche abschließen, ohne die Zielzahl zu finden, geben Sie "Target [target] not found" aus

Die Position soll unter Verwendung einer 0-basierten Indizierung angegeben werden (die erste Zeile ist 0, die erste Spalte ist 0).

Spickzettel

Labels ermöglichen es Ihnen, aus äußeren Schleifen innerhalb von verschachtelten Schleifen auszubrechen. Ein Label ist ein Bezeichner, gefolgt von einem Doppelpunkt, der vor einer Schleife platziert wird.

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if condition {
            break outer  // beendet beide Schleifen
        }
    }
}

Verwenden Sie break gefolgt vom Labelnamen, um diese spezifische Schleife zu verlassen, selbst aus tief verschachtelten Strukturen. Dies ist nützlich, wenn Sie 2D-Daten durchsuchen und vollständig anhalten möchten, sobald Sie Ihr Ziel gefunden haben.

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
    
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf