Laço Aninhado
Parte da seção Fundamentos do Journey de Kotlin da Coddy. Lição 52 de 93.
Você pode colocar um loop dentro de outro loop para criar um loop aninhado. O loop interno é executado completamente a cada iteração do loop externo.
val rows = 2
val cols = 3
for (i in 1..rows) {
for (j in 1..cols) {
println("i=$i, j=$j")
}
}
// Saída:
// i=1, j=1
// i=1, j=2
// i=1, j=3
// i=2, j=1
// i=2, j=2
// i=2, j=3Quando i é 1, o loop interno é executado cols vezes (j vai de 1 a 3). Então i se torna 2, e o loop interno recomeça, com j indo de 1 a 3 novamente. Isso nos dá 2 × 3 = 6 iterações no total. rows e cols nunca mudam: eles apenas dizem aos loops quando parar.
Laços aninhados são comumente usados para criar padrões ou trabalhar com estruturas semelhantes a grades:
for (row in 1..3) {
for (col in 1..row) {
print("*")
}
println()
}
// Saída:
// *
// **
// ***Aqui, o intervalo do loop interno depende da variável do loop externo, criando um padrão triangular. A função print() exibe a saída sem uma quebra de linha, enquanto println() passa para a linha seguinte após cada linha.
Desafio
MédioLeia um número inteiro n da entrada. Use loops aninhados para imprimir uma tabuada para os números de 1 a n.
Para cada linha i, de 1 a n, imprima os produtos i * 1, i * 2, ..., i * n separados por espaços, seguidos por uma quebra de linha.
Por exemplo, se a entrada for 3, a saída deverá ser:
1 2 3
2 4 6
3 6 9Se a entrada for 4, a saída deverá ser:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16Use print() com um espaço para exibir valores na mesma linha, e println() para passar para a próxima linha.
Use um contador novo para cada loop (por exemplo, i para as linhas e j para as colunas) e compare ambos com n. Não altere o próprio n: cada linha precisa dele novamente.
Experimente você mesmo
fun main() {
// Leia a entrada
val n = readLine()!!.toInt()
// TODO: Escreva seu código abaixo
// Use laços aninhados para imprimir a tabuada
// Use print() com um espaço para os valores na mesma linha
// Use println() para passar para a próxima linha
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores – Parte 1
Operadores aritméticosOperador móduloAtribuição aumentadaOperadores de comparaçãoRecapitulação – Matemática simples7Entrada e Saída Básicas
Função PrintlnTemplates de StringEntrada com ReadLineConversão de TiposRevisão - Anos até a AposentadoriaRevisão - Verdadeiro ou Falso10Funções
Declare uma funçãoParâmetros e argumentosValores de retornoArgumentos nomeadosValores padrãoFunções de expressão únicaRecapitulação — função SigmaRecapitulação — função de validação2Variáveis
Val vs VarInferência de TiposNúmerosStringBooleanoConvenções de NomenclaturaRecapitulação - Inicializar Variáveis5Operadores – Parte 2
Operadores lógicos – Parte 1Operadores lógicos – Parte 2Operadores lógicos – Parte 3Ternário com expressão ifRecapitulação – Lógica simples8Calculadora de Divisão da Conta
Mensagem de Boas-vindasObtendo a Entrada11FizzBuzz com uma Reviravolta
Visão Geral do JogoA Função FizzBuzz3Nullabilidade
O que é Null SafetyTipos anuláveisOperador de chamada seguraOperador ElvisNoções básicas do desafio de funçõesAsserção de não nuloRecapitulação - Acesso seguro6Tomada de Decisões
Instrução IfIf - ElseIf como ExpressãoExpressão WhenWhen com IntervalosRecapitulação - Calculadora Simples9Laços de Repetição
Laço ForLaço WhileLaço Do-WhileBreakContinueIntervalos em LaçosLaço AninhadoRecapitulação - FatorialRecapitulação - Entrada Dinâmica12Fundamentos de Listas
List vs MutableListAcessando ElementosModificando ListasMétodos de ListaPair e TripleRecapitulação - Lista de ProdutosRecapitulação - Lista Invertida15Rastreador de Despesas Diárias
Visão Geral do ProjetoSair do ProgramaPratique por conta própria: Playground de Kotlin