Bucle anidado
Parte de la sección Fundamentos del Journey de Kotlin de Coddy. Lección 52 de 93.
Puedes colocar un bucle dentro de otro para crear un bucle anidado. El bucle interno se ejecuta por completo en cada iteración del bucle externo.
val rows = 2
val cols = 3
for (i in 1..rows) {
for (j in 1..cols) {
println("i=$i, j=$j")
}
}
// Salida:
// i=1, j=1
// i=1, j=2
// i=1, j=3
// i=2, j=1
// i=2, j=2
// i=2, j=3Cuando i es 1, el bucle interno se ejecuta cols veces (j va de 1 a 3). Después, i pasa a ser 2 y el bucle interno comienza de nuevo, con j yendo de 1 a 3 otra vez. Esto nos da un total de 2 × 3 = 6 iteraciones. rows y cols nunca cambian: solo indican a los bucles cuándo detenerse.
Los bucles anidados se usan comúnmente para crear patrones o trabajar con estructuras similares a cuadrículas:
for (row in 1..3) {
for (col in 1..row) {
print("*")
}
println()
}
// Salida:
// *
// **
// ***Aquí, el rango del bucle interno depende de la variable del bucle externo, creando un patrón triangular. La función print() muestra la salida sin un salto de línea, mientras que println() pasa a la línea siguiente después de cada fila.
Desafío
IntermedioLee un entero n de la entrada. Usa bucles anidados para imprimir una tabla de multiplicar de los números del 1 al n.
Para cada fila i del 1 al n, imprime los productos i * 1, i * 2, ..., i * n separados por espacios, seguidos de un salto de línea.
Por ejemplo, si la entrada es 3, la salida debería ser:
1 2 3
2 4 6
3 6 9Si la entrada es 4, la salida debería ser:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16Usa print() con un espacio para mostrar valores en la misma línea, y println() para pasar a la siguiente fila.
Usa un contador nuevo para cada bucle (por ejemplo, i para las filas y j para las columnas) y compara ambos con n. No cambies n: lo necesitas de nuevo en cada fila.
Pruébalo tú mismo
fun main() {
// Lee la entrada
val n = readLine()!!.toInt()
// TODO: Escribe tu código a continuación
// Usa bucles anidados para imprimir la tabla de multiplicar
// Usa print() con un espacio para los valores de la misma línea
// Usa println() para pasar a la siguiente fila
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores, parte 1
Operadores aritméticosOperador móduloAsignación aumentadaOperadores de comparaciónRepaso: matemáticas simples7Entrada y salida básicas
Función PrintlnPlantillas de cadenasEntrada con ReadLineConversión de tiposRepaso - Años hasta la jubilaciónRepaso - Verdadero o falso10Funciones
Declarar una funciónParámetros y argumentosValores de retornoArgumentos con nombreValores predeterminadosFunciones de una sola expresiónRepaso - Función SigmaRepaso - Función de validación2Variables
Val frente a VarInferencia de tiposNúmerosCadenaBooleanoConvenciones de nomenclaturaRepaso: inicializar variables5Operadores Parte 2
Operadores lógicos Parte 1Operadores lógicos Parte 2Operadores lógicos Parte 3Ternario con expresión ifRepaso: lógica simple8Calculadora para dividir la cuenta
Mensaje de bienvenidaObtención de datos11FizzBuzz con un giro
Descripción general del juegoLa función FizzBuzz3Nullabilidad
Qué es la seguridad frente a valores nulosTipos anulablesOperador de llamada seguraOperador ElvisConceptos básicos de retos de funcionesAfirmación de no nulidadRepaso: acceso seguro6Toma de decisiones
Sentencia ifIf - ElseIf como expresiónExpresión whenWhen con rangosRepaso - Calculadora simple9Bucles
Bucle ForBucle WhileBucle Do-WhileBreakContinueRangos en buclesBucle anidadoRepaso - FactorialRepaso - Entrada dinámicaPractica por tu cuenta: Playground de Kotlin