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.

challenge icon

Desafío

Fácil

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

Recibirás dos entradas:

  • Una cadena que representa las dimensiones de la cuadrícula con el formato "rows,cols" (por ejemplo, "3,4")
  • Una cadena que representa el número objetivo que se debe 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 en la cuadrícula
  4. Cuando encuentres el número objetivo, imprimir "Found [target] at position ([row], [col])" y salir inmediatamente de ambos bucles usando el break etiquetado
  5. Si completas la búsqueda sin encontrar el objetivo, imprimir "Target [target] not found"

La posición debe indicarse usando índices basados en 0 (la primera fila es 0 y la primera columna es 0).

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

Practica por tu cuenta: Compilador de Go online