Menu
Coddy logo textTech

Salir de bucles anidados

Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 2 de 68.

Al trabajar con bucles anidados, una sentencia break regular solo sale del bucle más interno. Sin embargo, Go proporciona etiquetas que le permiten salir directamente de los bucles externos, brindándole un control preciso sobre estructuras de bucle complejas.

Una etiqueta es un identificador seguido de dos puntos que se coloca antes de un bucle. Luego puedes usar break seguido del nombre de la etiqueta para salir de ese bucle específico, incluso desde dentro de bucles anidados.

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)
    }
}

En este ejemplo, cuando se cumple la condición i == 1 && j == 1, break outer sale inmediatamente tanto del bucle interno como del externo. Esto es especialmente útil cuando se busca a través de estructuras de datos en 2D donde se desea detener la búsqueda por completo una vez que se encuentra lo que se está buscando.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

challenge icon

Desafío

Fácil

En este desafío, practicarás el uso de sentencias break etiquetadas para salir de bucles anidados al buscar a través de una cuadrícula 2D. Debes encontrar un número objetivo específico en la cuadrícula y detener la búsqueda inmediatamente una vez que lo encuentres.

Recibirás dos entradas:

  • Una cadena que representa las dimensiones de la cuadrícula en el formato "rows,cols" (por ejemplo, "3,4")
  • Una cadena que representa el número objetivo a buscar (por ejemplo, "7")

Se te proporciona la siguiente cuadrícula 2D de números:

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

Tu tarea es:

  1. Analizar las dimensiones de la primera entrada para determinar cuántas filas y columnas buscar
  2. Analizar el número objetivo de la segunda entrada
  3. Usar bucles anidados con un break etiquetado para buscar a través de la cuadrícula
  4. Cuando encuentres el número objetivo, imprime "Found [target] at position ([row], [col])" y sal inmediatamente de ambos bucles usando el break etiquetado
  5. Si completas la búsqueda sin encontrar el objetivo, imprime "Target [target] not found"

La posición debe informarse utilizando una indexación basada en 0 (la primera fila es 0, la primera columna es 0).

Hoja de referencia

Las etiquetas te permiten salir de bucles externos desde el interior de bucles anidados. Una etiqueta es un identificador seguido de dos puntos colocado antes de un bucle.

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if condition {
            break outer  // sale de ambos bucles
        }
    }
}

Usa break seguido del nombre de la etiqueta para salir de ese bucle específico, incluso desde estructuras profundamente anidadas. Esto es útil cuando se busca a través de datos en 2D y se desea detenerse por completo una vez que se encuentra el objetivo.

Pruébalo tú mismo

package main

import (
    "fmt"
    "strconv"
    "strings"
)

func main() {
    // Leer entrada
    var dimensions string
    var targetStr string
    fmt.Scanln(&dimensions)
    fmt.Scanln(&targetStr)
    
    // Analizar dimensiones
    dimParts := strings.Split(dimensions, ",")
    rows, _ := strconv.Atoi(dimParts[0])
    cols, _ := strconv.Atoi(dimParts[1])
    
    // Analizar número objetivo
    target, _ := strconv.Atoi(targetStr)
    
    // Cuadrícula predefinida
    grid := [][]int{
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12},
    }
    
    // TODO: Escribe tu código a continuación
    // Usa bucles anidados con una etiqueta de interrupción (labeled break) para buscar el objetivo
    
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo