Las estructuras de control de Repetitivas o de iteracción evalúan una condición al igual que las estructuras de control de selección pero ejecutan el mismo bloque código tantas veces como la condición siga siendo cierta, esto es lo que se llama "bucle" o "loop".
Como estas repeticiones se van a estar ejecutando mientas la evaluación sea verdadera es necesario agregar dentro de nuestro circuito un cambio para que no se nos vuelva infinito, es decir si "1<10" entramos al loop y en la segunda vuelta o iteración, nuestro "1<10" sigue siendo cierto, volvemos a caer dentro del loop y como no se vaya cambiando va a ocurrir que "1<10" se cumple siempre.
Por lo cual hay que tener siempre en cuenta la salida del bucle al momento de crearlo.
While
El bucle while evalua una condicion y de ser cierta ejecutará nuestro código. Una vez que llega al fin de nuestro bloque, vuelve a evaluar la condición, de encontrar verdadera la condición otra vez ejecutará nuestro código y volverá evaluar la condición una vez más hasta que sea falsa.
- while(condicon){
- //nuestro código a repetir
- //Instruccion de cambio de variable
- }
- //código que continua luego que sale del bucle.
Veamos con un ejemplo, supongamos que deseamos conocer la tabla de multiplicar de algún número. Para lo cual utilizo estas 2 lineas de código para ingresar un entero por teclado:
- Scanner miScan = new Scanner(System.in);
- respuesta = miScan.nextInt();
También utilizo 3 variables de números enteros:
- respuestas: para el valor que yo ingreso por teclado(En la ejecución utilize el n°8)
- vuelta: quien me determina las vueltas del bucle, además es el número que recorre los enteros en 1 para multiplicar a mi respuesta
- resultado: el nombre lo dice, también es quién determina cuando salir del bucle al ser mayor a 10 veces mi respuesta
Entonces mi while repite cada linea de salida pero con valores incrementados hasta alcanzar el tope que yo le impongo, de 10 veces.
- import java.util.Scanner;
- public class Mientras {
- int respuesta, vuelta = 1, resultado;
- respuesta = miScan.nextInt();
- resultado = respuesta;
- while(resultado < respuesta*10){
- resultado = respuesta * vuelta;
- vuelta++;
- }
- }
- }
- run:
- Ingrese un número de la tabla de multiplicación que desee conocer:
- 8
- 8 * 1 = 8
- 8 * 2 = 16
- 8 * 3 = 24
- 8 * 4 = 32
- 8 * 5 = 40
- 8 * 6 = 48
- 8 * 7 = 56
- 8 * 8 = 64
- 8 * 9 = 72
- 8 * 10 = 80
- BUILD SUCCESSFUL (total time: 7 seconds)
Do/While
El problema que se me presenta con el "while" es que yo evaluo una condición primero para entrar al bucle, pero si la condición no es cierta la primera vez, entonces nunca entro al loop y me salto de este.
Para solucionar este inconveniente esta el do/while (hacer/mientras) que primero ejecuta mi bloque y luego evalua la condición , así me estoy asegurando de hacer la primera vuelta si o si.
El siguiente ejemplo lo tomo de nuestros amigos los simpsons, cuando bart y lisa querian ir al Montesplash y le preguntan a homero de "manera repetitiva" hasta encontrar la respuesta deseada, un String con el valor "si". Como homero no podia decir que si para que después le pregunten usamos el do-while
- import java.util.Scanner;
- public class Montesplash {
- String respuesta;
- do{
- respuesta = miScanner.nextLine();
- }while(!respuesta.equalsIgnoreCase(afirmativo));
- }
- }
For
El "for" no es mas que un "while" encubierto pero expresado de manera resumida en una sola línea de código
Supongamos que expresamos lo siguiente con un while:
Veremos que este cuenta con:
- Un punto de Partida: marcado con el entero "vuelta"
- Condición para finalizar marcado en la condición "vuelta <= 10"
- El incremento marcado con "vuelta++" dentro de nuestro código
Bueno, el ciclo "For" cuenta con estas 3 partes dentro de su condición separadas por ";" :
Generalmente se usa como variable entera a "i" de iterador en lugar de vuelta y este será menor a la condición para finalizar
Sigamos con los ejemplos de los Simpsons =) en todas las introoducciones bart es castigado a escribir en el pizarrón una y otra vez lo mismo. Si se tuviera que programar en java sería tan fácil como esto:
- public class BartSimpson {
- for(int i = 0; i <= 20; i++){
- }
- }
- }
De esta forma con el loop for se repetiria 20 veces seguidas la misma frase como lo hemos determinado.
Continue y Break
La sentencia "break" del inglés "romper" viene a acabar con el bucle sin importar que éste halla llegado a su fin o no, cuando se ejecuta la linea del break, automaticamente se sale del loop.
Podemos nombrar un bucle para identificarlo con cualquier nombre seguido de : en la linea superior de este y decirle se interrumpa en algún momento.
- int cien = 100;
- esteEsMiBucle:
- for(int i = 0; i < cien; i++){
- if(i == 5){
- break esteEsMiBucle;
- }
- }
De esta manera, el loop está planteado para que se ejecute unas 100 veces mostrando un número que se incrementa, sin embrago al llegar a 5 se interrumpe el ciclo y se sale de este
Por su parte "continue" tiene un efecto parecido al break salvo que no ordena salirse del bucle pero si interrumpe todo lo que está debajo y continua con ejecuntandose las vueltas, es decir al llegar al continue nos obliga a detener la vuelta actual en ese punto y comenzar la siguiente
- int diez = 10;
- for(int i = 0; i < diez; i++){
- if(i == 5){
- continue;
- }
- }
La utilidad real del continue se da por ejemplo al cargar sistemáticamente un fichero, si en alguno ocurre un error por ejemplo en el n°15 le decimos que continue cargando los siguientes
No hay comentarios:
Publicar un comentario