Los Bucles en Programación
Concepto: Repetición de un bloque de código lógico según una condición específica
I. Bucle while
Sintaxis: while(expresión booleana){
//código lógico (operación del bucle)
}
Flujo de ejecución:
- Primero se evalúa la expresión booleaan, si el resultado es true, se ejecuta el código lógico
- Después de cada ejecución, se vuelve a evaluar la expresión, si sigue siendo true, se ejecuta nuevamente
- Solo cuando el resultado de la expresión booleana sea false, se sale de la estructura del bucle y se continúa con el código siguiente
Ejemplo uno: Imprimir "HolaMundo" 100 veces
public class PruebaWhile{
public static void main(String[] args){
//Imprimir "HolaMundo" 100 veces
int contador = 1;//1. Parte inicial: variable para la evaluación
while (contador <= 100){//2. Condición del bucle: determina si se continúa
System.out.println("HolaMundo");//3. Operación del bucle: lógica que se ejecuta
contador++;//4. Parte iterativa: incremento que controla la condición
}
System.out.println("Programa finalizado...");
}
}
Ejemplo dos: Calcular la suma de todos los números del 1 al 100
public class PruebaSuma{
public static void main(String[] args){
/*
Calcular la suma de todos los números del 1 al 100
1. Problema de 100 iteraciones
2. Suma durante el proceso del bucle
*/
int numero = 1;//parte inicial
int total = 0;
while(numero <= 100){//condición del bucle
total = total + numero;//operación del bucle
numero++;//parte iterativa
}
System.out.println("La suma total es: " + total);
System.out.println("Programa finalizado...");
}
}
Ejemplo tres: Calcular la suma de todos los números pares del 1 al 100
public class PruebaSumaPares{
public static void main(String[] args){
/*
Calcular la suma de todos los números pares del 1 al 100
Enfoque 1: Obtener todos los números pares y sumarlos
Enfoque 2: Recorrer cada número del 1 al 100, verificar si es par y sumar si cumple
*/
int actual = 1;
int acumulador = 0;
while(actual <= 100){
if(actual % 2 == 0){//verificar si es par
acumulador = acumulador + actual;//suma
}
actual++;
}
System.out.println("La suma de pares es: " + acumulador);
}
}
Nota: Un bucle consta de cuatro partes
Características del while:
- Si la primera evaluación no se cumple, nunca se ejecuta (número de ejecuciones: 0~n)
- Tiene una condición de entrada desde el principio, evalúa primero y luego ejecuta, adecuado para casos con número de iteraciones definido
II. Bucle do-while
Sintaxis: do{
código lógico (operación del bucle)
}while(expresión booleana);
Flujo de ejecución:
- Primero se ejecuta la operación del bucle, luego se evalúa la expresión booleana
- Si el resultado es true, se vuelve a ejecutar la operación del bucle
- Si el resultado es false, se sale de la estructura del bucle y se continúa con el código siguiente
Ejemplo cuatro: Imprimir "HolaMundo" 100 veces
public class PruebaDoWhile{
public static void main(String[] args){
//Imprimir "HolaMundo" 100 veces
int iteracion = 1;
do{
System.out.println("Imprimiendo HolaMundo por la " + iteracion + " vez");
iteracion++;
}while(iteracion <= 100);
System.out.println("Programa finalizado...");
}
}
Ejemplo cinco: Profesor corrigiendo trabajos de estudiantes
import java.util.Scanner;
public class PruebaDoWhile2{
public static void main(String[] args){
//Operación del bucle: estudiantes copian código, profesor ingresa comentarios
Scanner entrada = new Scanner(System.in);
char respuesta;//registra el comentario del profesor
do{
System.out.println("Copie el código del trabajo........");
System.out.println("Ingrese el comentario del profesor:");
respuesta = entrada.next().charAt(0);//ingresar 's' significa aprobado, salir del bucle; de lo contrario continuar
}while(respuesta != 's');
System.out.println("El trabajo ha sido completado");
}
}
Características del do-while:
- No tiene condición de entrada al principio, ejecuta primero y luego evalúa
- Si la evaluación se cumple, repite; si no, se ejecuta al menos una vez (número de ejecuciones: 1~n)
- Caso de uso: adecuado para situaciones donde el número de iteraciones no está definido
III. Bucle for
Sintaxis:
for(parte inicial; condición del bucle; parte iterativa){
//operación del bucle
}
Flujo de ejecución:
- Primero se ejecuta la parte inicial (solo una vez)
- Se evalúa la expresión booleana, si el resultado es true, se ejecuta el código lógico
- Después de cada ejecución, se realiza la parte iterativa, se vuelve a evaluar, y si sigue siendo true, se ejecuta nuevamente el código lógico
- Solo cuando el resultado de la expresión booleana sea false, se sale de la estructura del bucle y se continúa con el código siguiente
Ejemplo seis: Imprimir "HolaMundo" 100 veces
public class PruebaFor{
public static void main(String[] args){
//Imprimir "HolaMundo" 100 veces
//1. parte inicial (solo una vez) 2. condición del bucle 3. operación del bucle 4. parte iterativa
for(int posicion = 1; posicion <= 100; posicion++){
System.out.println("HolaMundo " + posicion);
}
System.out.println("Programa finalizado...");
}
}
//El bucle for es igual al while, si la primera evaluación no se cumple, nunca se ejecuta. (número de ejecuciones: 0~n)
Ejemplo siete: Calcular el promedio de cinco estudiantes
import java.util.Scanner;
public class PruebaFor2{
public static void main(String[] args){
Scanner teclado = new Scanner(System.in);
//Calcular el promedio de 5 estudiantes
double acumulador = 0.0;//suma total
for(int estudiante = 1; estudiante <= 5; estudiante++){
//1. Control de entrada de calificaciones por consola
System.out.println("Ingrese la calificación del estudiante " + estudiante + ":");
double nota = teclado.nextDouble();
//2. Acumulación total
acumulador = acumulador + nota;
}
double promedio = acumulador / 5;
System.out.println("El promedio es: " + promedio);
}
}
Características: Tiene una condición de entrada desde el principio, evalúa primero y luego ejecuta, adecuado para casos con número de iteraciones definido
Sentencias de control de flujo:
- break: Finaliza todo el bucle
- Continue: Durante la ejecución del bucle, si se encuentra continue, se saltea la iteración actual y continúa con la siguiente
Ejemplo ocho: break
import java.util.Scanner;
public class PruebaBreak{
public static void main(String[] args){
Scanner teclado = new Scanner(System.in);
//Entrada de calificaciones de 5 estudiantes, si alguna calificación no está en el rango (0-100), se considera inválida y se sale del bucle
double suma = 0.0;
boolean valido = true;//indica validez
for(int posicion = 1; posicion <= 5; posicion++){
System.out.println("Ingrese la calificación del estudiante " + posicion + ":");
double calificacion = teclado.nextDouble();
if(calificacion < 0 || calificacion > 100){
valido = false;//dato inválido
break;
}
suma = suma + calificacion;
}
if(valido == true){//según la marca válida se decide si calcular el promedio
double promedio = suma / 5;
System.out.println("El promedio es: " + promedio);
}else{
System.out.println("Dato inválido, ejecute nuevamente el programa para calcular el promedio");
}
}
}
Ejemplo nueve: continue
import java.util.Scanner;
public class PruebaContinue{
public static void main(String[] args){
Scanner teclado = new Scanner(System.in);
//Entrada de calificaciones de 5 estudiantes, si alguna calificación no está en el rango (0-100), se considera inválida, se continúa ingresando hasta que sea válida, luego se calcula el promedio
double suma = 0.0;
for(int contador = 1; contador <= 5; ){
System.out.println("Ingrese la calificación del estudiante " + contador + ":");
double nota = teclado.nextDouble();
if(nota < 0 || nota > 100){
continue;
}
suma = suma + nota;
contador++;
}
double promedio = suma / 5;
System.out.println("El promedio es: " + promedio);
}
}
IV. Bucles anidados
Concepto: Dentro de una estructura de bucle completa, se anida otra estructura de bucle completa
Ejemplo diez: Imprimir tres filas de cinco asteriscos *
public class PruebaForAnidado{
/*
*****
*****
*****
*/
public static void main(String[] args){
for(int fila = 1; fila <=3; fila++){//repite el código interno 3 veces
for(int columna = 1; columna <=5; columna++){//imprime cinco estrellas en una fila
System.out.print("*");
}
System.out.println();
}
}
}
Ejemplo once: Calcular el promedio de cinco estudiantes en tres clases
import java.util.Scanner;
public class PruebaForAnidado2{
public static void main(String[] args){
Scanner teclado = new Scanner(System.in);
for(int salon = 1; salon <= 3; salon++){
System.out.println("------Clase " + salon + "------");
double suma = 0.0;
for(int estudiante = 1; estudiante <=5; estudiante++){
System.out.println("Ingrese la calificación del estudiante " + estudiante + ":");
double calificacion = teclado.nextDouble();
suma += calificacion;
}
double promedio = suma / 5;
System.out.println("El promedio de los cinco estudiantes de la clase " + salon + " es: " + promedio);
}
}
}
Ejemplo doce: Imprimir un triángulo rectángulo con *
public class PruebaForAnidado3{
public static void main(String[] args){
/*
Imprimir triángulo rectángulo
*
**
***
****
*****
*/
for(int fila =1; fila <= 5; fila++){//capa externa controla filas
for(int columna = 1; columna <= fila; columna++){//capa interna controla columnas
System.out.print("*");
}
System.out.println();
}
System.out.println("Programa finalizado");
}
}
Ejemplo trece: Tabla de multiplicar del 9x9
public class PruebaForAnidado4{
public static void main(String[] args){
for(int multiplicador = 1; multiplicador <= 9; multiplicador++){
for(int multiplicando = 1; multiplicando <= multiplicador; multiplicando++){
System.out.print(multiplicando + "x" + multiplicador + " = " + (multiplicando*multipador) + " ");
}
System.out.println();
}
System.out.println("Programa finalizado");
}
}
Ejemplo catorce: Imprimir un triángulo isósceles
public class PruebaForAnidado5{
public static void main(String:: args){
/*
Imprimir triángulo isósceles
*/
for (int nivel = 1; nivel <= 5; nivel++){
for (int espacio = 5; espacio >=nivel; espacio--) {
System.out.print(" ");
}
for (int asterisco = 1; asterisco <= nivel; asterisco++) {
System.out.print("*");
}
for (int asterisco = 1; asterisco < nivel; asterisco++) {
System.out.print("*");
}
System.out.println();
}
System.out.println("Programa finalizado");
}
}