Interrompendo Loops Aninhados
Parte da seção Lógica & Fluxo do Journey de GO da Coddy. Lição 2 de 68.
Ao trabalhar com loops aninhados, uma instrução break comum encerra apenas o loop mais interno. No entanto, Go oferece rótulos que permitem sair diretamente de loops externos, dando a você um controle preciso sobre estruturas de loop complexas.
Um rótulo é um identificador seguido de dois-pontos que você coloca antes de um laço. Você pode então usar break seguido do nome do rótulo para sair desse laço específico, mesmo de dentro de laços aninhados.
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)
}
}Neste exemplo, quando a condição i == 1 && j == 1 é atendida, break outer encerra imediatamente tanto o loop interno quanto o externo. Isso é particularmente útil ao pesquisar estruturas de dados 2D quando você quer parar completamente a busca assim que encontrar o que está procurando.
Desafio
FácilNeste desafio, você vai praticar o uso de instruções break rotuladas para sair de loops aninhados ao pesquisar em uma grade 2D. Você precisa encontrar um número-alvo específico na grade e interromper a busca imediatamente assim que encontrá-lo.
Você receberá duas entradas:
- Uma string que representa as dimensões da grade no formato
"rows,cols"(por exemplo,"3,4") - Uma string que representa o número-alvo a ser encontrado (por exemplo,
"7")
Você receberá a seguinte grade 2D de números:
grid := [][]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
}Sua tarefa é:
- Usar os valores já lidos para você no código acima:
rowsecols(a parte da grade a ser pesquisada),targetegrid - Usar loops aninhados com um
breakrotulado para pesquisar na grade - Quando encontrar o número-alvo, imprimir
"Found [target] at position ([row], [col])"e sair imediatamente dos dois loops usando o break rotulado - Se concluir a busca sem encontrar o número-alvo, imprimir
"Target [target] not found"
A posição deve ser informada usando indexação baseada em 0 (a primeira linha é 0, a primeira coluna é 0).
Experimente você mesmo
// TODO: Escreva seu código abaixo
// Use laços aninhados com break rotulado para procurar o alvo
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