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, Go também permite usar rótulos com a instrução continue. Um continue rotulado ignora a iteração atual do loop especificado e passa para a próxima iteração.
Isso é particularmente útil em loops aninhados quando você quer 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 ignora o restante da iteração atual do loop externo, incluindo o loop interno e a mensagem "End of outer loop iteration". Em seguida, o programa passa diretamente para a próxima iteração do loop externo, na qual i se torna 2.
Desafio
FácilNeste desafio, você praticará o uso de instruções continue rotuladas para controlar a execução de loops nested. Você está desenvolvendo um sistema de processamento de dados que precisa ignorar determinadas iterações do loop outer com base em condições encontradas nos loops internos.
Você receberá duas entradas:
- Uma
stringque representa o número de linhas a processar (por exemplo,"4") - Uma
stringque representa o número daconditionde ignorar (por exemplo,"3")
O seguinte 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}
}Sua tarefa é:
- Interpretar o número de linhas da primeira entrada para determinar quantas linhas processar
- Interpretar o número da
conditionde ignorar da segunda entrada - Usar
loopsnestedcom umcontinuerotulado para processar os dados - Para cada linha, verificar cada valor de coluna nessa linha
- Se você encontrar o número da
conditionde ignorar em qualquer coluna de uma linha, usecontinuerotulado para ignorar o restante do processamento dessa linha e passar para a próxima linha - Para linhas que não contêm o número da
conditionde ignorar, imprimir"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]" - Para linhas que contêm o número da
conditionde ignorar, imprimir"Skipping row [row_number] due to condition"
Os números das linhas devem ser informados usando indexação baseada em 0 (a primeira linha é 0). Processe somente o número de linhas especificado na primeira entrada e verifique somente as primeiras 5 colunas de cada linha.
Experimente você mesmo
package main
import (
"fmt"
"strconv"
)
func main() {
// Ler entrada
var rowsInput string
var skipConditionInput string
fmt.Scanln(&rowsInput)
fmt.Scanln(&skipConditionInput)
// Analisar 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 em busca do número da condição de pulo
// Imprima mensagens apropriadas com base em se a condição foi encontrada
}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 ComportamentosPratique por conta própria: Compilador de Go online