Bucle anidado
Parte de la sección Fundamentos del Journey de Rust de Coddy. Lección 41 de 75.
Un bucle anidado es simplemente un bucle dentro de otro bucle. El bucle interno completará todas sus iteraciones por cada iteración individual del bucle externo. Una buena analogía es un reloj: por cada hora (bucle externo), la aguja de los minutos (bucle interno) debe completar su ciclo completo de 60 minutos.
Ejemplo de un bucle anidado:
let rows = 2;
let cols = 2;
for x in 0..rows {
for y in 0..cols {
println!("{} {}", x, y);
}
}
// Esto mostrará:
// 0 0
// 0 1
// 1 0
// 1 1El bucle externo (x) se ejecuta rows veces y, en cada una de ellas, el bucle interno (y) se ejecuta cols veces. Cada bucle tiene su propio contador: y vuelve a empezar desde 0 cada vez que se ejecuta el bucle externo, mientras que rows y cols permanecen iguales y solo indican a los bucles cuándo detenerse.
Desafío
PrincipianteEscribe un programa que imprima un rectángulo de asteriscos (*) con un ancho y una altura determinados.
Entrada: dos enteros: width y height (el código inicial ya los lee).
Por ejemplo:
Si width = 5 y height = 3, la salida debería ser:
*****
*****
*****Si width = 4 y height = 6, la salida debería ser:
****
****
****
****
****
****Usa un contador nuevo para cada bucle (por ejemplo, i para las filas y j para los asteriscos de una fila) y compáralo con height o width. No cambies height ni width: cada fila necesita width de nuevo.
Pruébalo tú mismo
use std::io;
fn main() {
let mut width_input = String::new();
let mut height_input = String::new();
io::stdin().read_line(&mut width_input).unwrap();
io::stdin().read_line(&mut height_input).unwrap();
let width: i32 = width_input.trim().parse().unwrap();
let height: i32 = height_input.trim().parse().unwrap();
// Escribe tu código a continuación
}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 de móduloAtajos aritméticosOperadores de comparaciónComparación de strings5Operadores Parte 2
Operadores lógicos Parte 1Operadores lógicos Parte 2Repaso - Lógica simpleOperadores lógicos Parte 33Variables Parte 2
Declaración de tiposConvenciones de nomenclaturaInferencia de tiposResumen - Inicializar variablesConversión de tipos9Bucles
For sobre seriesBucle WhileBreakContinueBucle anidadoEtiquetas de bucleBucle infinitoResumen - Entrada dinámicaPractica por tu cuenta: Compilador de Rust online