Continuar un bucle específico
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 3 de 68.
Al igual que puedes usar etiquetas con break para salir de bucles específicos, Go también te permite usar etiquetas con la sentencia continue. Un continue con etiqueta omite la iteración actual del bucle especificado y salta a su siguiente iteración.
Esto es particularmente útil en bucles anidados cuando quieres omitir el resto de la iteración actual de un bucle externo desde dentro de un bucle interno, en lugar de simplemente continuar el bucle interno.
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 0 {
continue outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
fmt.Println("End of outer loop iteration")
}En este ejemplo, cuando i == 1 && j == 0, la sentencia continue outer omite el resto de la iteración actual del bucle externo, incluyendo el bucle interno y el mensaje "End of outer loop iteration". El programa luego pasa directamente a la siguiente iteración del bucle externo donde i se convierte en 2.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Desafío
FácilEn este desafío, practicarás el uso de sentencias continue con etiquetas para controlar la ejecución de bucles anidados. Estás construyendo un sistema de procesamiento de datos que necesita omitir ciertas iteraciones del bucle externo basándose en condiciones encontradas en los bucles internos.
Recibirás dos entradas:
- Una cadena que representa el número de filas a procesar (por ejemplo,
"4") - Una cadena que representa un número de condición de omisión (por ejemplo,
"3")
Se te proporciona el siguiente array de datos 2D:
data := [][]int{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}
}Tu tarea es:
- Analizar el número de filas de la primera entrada para determinar cuántas filas procesar
- Analizar el número de condición de omisión de la segunda entrada
- Usar bucles anidados con un
continueetiquetado para procesar los datos - Para cada fila, verificar el valor de cada columna en esa fila
- Si encuentras el número de condición de omisión en cualquier columna de una fila, usa el
continueetiquetado para omitir el resto del procesamiento de esa fila y pasar a la siguiente fila - Para las filas que no contienen el número de condición de omisión, imprime
"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]" - Para las filas que sí contienen el número de condición de omisión, imprime
"Skipping row [row_number] due to condition"
Los números de fila deben reportarse utilizando una indexación basada en 0 (la primera fila es 0). Procesa solo el número de filas especificado en la primera entrada, y solo verifica las primeras 5 columnas de cada fila.
Hoja de referencia
Usa etiquetas con continue para omitir la iteración actual de un bucle específico en bucles anidados:
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 0 {
continue outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
fmt.Println("End of outer loop iteration")
}Cuando se ejecuta continue outer, se omite el resto de la iteración actual del bucle externo y se salta directamente a la siguiente iteración del bucle etiquetado.
Pruébalo tú mismo
package main
import (
"fmt"
"strconv"
)
func main() {
// Leer entrada
var rowsInput string
var skipConditionInput string
fmt.Scanln(&rowsInput)
fmt.Scanln(&skipConditionInput)
// Analizar entradas
numRows, _ := strconv.Atoi(rowsInput)
skipCondition, _ := strconv.Atoi(skipConditionInput)
// Matriz de datos 2D proporcionada
data := [][]int{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25},
}
// TODO: Escribe tu código a continuación
// Usa bucles anidados con continue etiquetado para procesar los datos
// Verifica cada fila para el número de condición de salto
// Imprime los mensajes apropiados según si se encuentra la condición
}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
1Flujo de control avanzado
Switch con `fallthrough`Salir de bucles anidadosContinuar un bucle específicoLa sentencia `goto`Repaso: Control de bucles avanzado4Proyecto: Lista de tareas sencilla
Configuración del proyectoAñadir una tarea2Estructuras y Métodos
Definición de métodos en estructurasReceptores de valorReceptores de punteroElegir receptoresMétodos vs FuncionesResumen - Comportamiento de estructuras5Mapas en profundidad
Mapas de StructsPunteros como valores de MapVerificación de Maps NilComparación de MapsResumen - Contador de frecuencia de palabras3Interfaces (Conceptos básicos)
¿Qué es una interfaz?Definir una interfazImplementar una interfazUso de tipos de interfazInterfaz vacíaAserciones de tipoType SwitchResumen: Formas y comportamientos