Continuando um Loop Específico
Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 3 de 68.
Assim como você pode usar rótulos com break para sair de loops específicos, o Go também permite que você use rótulos com a instrução continue. Um continue rotulado pula a iteração atual do loop especificado e pula para a sua próxima iteração.
Isso é particularmente útil em loops aninhados quando você deseja pular o restante da iteração atual de um loop externo a partir de um loop interno, em vez de apenas continuar o loop 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")
}Neste exemplo, quando i == 1 && j == 0, a instrução continue outer pula o restante da iteração atual do loop externo, incluindo o loop interno e a mensagem "End of outer loop iteration". O programa então move-se diretamente para a próxima iteração do loop externo onde i se torna 2.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilNeste desafio, você praticará o uso de instruções continue rotuladas para controlar a execução de loops aninhados. Você está construindo um sistema de processamento de dados que precisa pular certas iterações do loop externo com base em condições encontradas nos loops internos.
Você receberá duas entradas:
- Uma string representando o número de linhas a serem processadas (ex:
"4") - Uma string representando um número de condição de pulo (ex:
"3")
Você recebeu o seguinte array de dados 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}
}Sua tarefa é:
- Analisar o número de linhas da primeira entrada para determinar quantas linhas processar
- Analisar o número da condição de pulo da segunda entrada
- Usar loops aninhados com um
continuerotulado para processar os dados - Para cada linha, verifique o valor de cada coluna naquela linha
- Se você encontrar o número da condição de pulo em qualquer coluna de uma linha, use o
continuerotulado para pular o restante do processamento dessa linha e passar para a próxima linha - Para linhas que não contêm o número da condição de pulo, imprima
"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]" - Para linhas que contêm o número da condição de pulo, imprima
"Skipping row [row_number] due to condition"
Os números das linhas devem ser relatados usando indexação baseada em 0 (a primeira linha é 0). Processe apenas o número de linhas especificado na primeira entrada e verifique apenas as primeiras 5 colunas de cada linha.
Folha de consulta
Use rótulos com continue para pular a iteração atual de um loop específico em loops aninhados:
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")
}Quando continue outer é executado, ele pula o restante da iteração atual do loop externo e salta diretamente para a próxima iteração do loop rotulado.
Experimente você mesmo
package main
import (
"fmt"
"strconv"
)
func main() {
// Ler a entrada
var rowsInput string
var skipConditionInput string
fmt.Scanln(&rowsInput)
fmt.Scanln(&skipConditionInput)
// Analisar as entradas
numRows, _ := strconv.Atoi(rowsInput)
skipCondition, _ := strconv.Atoi(skipConditionInput)
// Array de dados 2D fornecido
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: Escreva seu código abaixo
// Use loops aninhados com continue rotulado para processar os dados
// Verifique cada linha para o número da condição de pulo
// Imprima mensagens apropriadas com base no fato de a condição ser encontrada ou não
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Fluxo de Controle Avançado
Switch com `fallthrough`Interrompendo Loops AninhadosContinuando um Loop EspecíficoA Instrução `goto`Recapitulação - Controle de Loop Avançado4Projeto: Lista de Tarefas Simples
Configuração do ProjetoAdicionando uma Tarefa2Structs e Métodos
Definindo Métodos em StructsRecebedores de ValorRecebedores de PonteiroEscolhendo RecebedoresMétodos vs FunçõesRecapitulação - Comportamento de Structs5Mapas em Profundidade
Mapas de StructsPonteiros como Valores de MapVerificando Mapas NilComparando MapasRecapitulação - Contador de Frequência de Palavras3Interfaces (O Básico)
O que é uma Interface?Definindo uma InterfaceImplementando uma InterfaceUsando Tipos de InterfaceInterface VaziaAsserções de TipoType SwitchRecapitulação - Formas e Comportamentos