Java desde Cero – Estructura de Control de Flujo – Bucles 2

Anteriormente:

Ya hemos revisado el bucle FOR, en esta ocasión vamos revisar la estructura de control de flujo While, tal como en la introducción mencionamos los bucles While son del tipo indeterminado, y es indeterminado ya que no se sabe cuántas veces se ejecutará ya que estas estructuras responden a una condición booleana, condición que deberá ser verdadera para que la ejecución continúe y falsa para que se detenga, su estructura es de la siguiente forma:

while (condición) {
     sentencias
}

Existen algunas observaciones respecto a while, puede ser que nuestra condición sea falsa con lo cual nunca ha de ejecutarse el while, o puede ser que sea verdadera y no exista un mecanismo que cambie dicha condición con lo cual la iteración de while será infinita, dicho esto debemos de tener especial cuidado cuando definamos la condición, sobre esta última observación, ¿Dónde conviene tener un bucle infinito? pues por lo general es un recurso que se emplea mucho en el desarrollo de los videojuegos y que se ejecutan hasta un cierre del mismo, pero mientras este cierre no se ejecute conviene mucho que todas las demás funcionalidades estén en ejecución, como el estar re-dibujando constantemente el canvas, si te encuentras en una situación que amerita su implementación simplemente puedes hacer esto:

while (true) {
     sentencias
}

No hay mucho que decir, así que veamos un ejemplo para visualizar el como trabaja esta estructura de control de flujo. Supongamos que tenemos  un número al azar entre 0 y 100, y tenemos que adivinar el número, tal que nuestro programa si en caso no acertemos nos de información de si el número que hemos ingresado es muy alto o muy bajo respecto al número que estamos buscando, cuando por fin acertemos el programa nos dará una felicitación, nos dirá que número era y cuántas veces hemos intentado hasta hallar el número.

import java.util.Scanner;

public class Bucles_2 {

  public static void main(String[] args) {

    int numero_buscado=(int)(Math.random()*100);
    boolean no_acerto=true;
    Scanner entrada=new Scanner(System.in);
    //System.out.println(numero_buscado);
    System.out.println("Bienvenido al juego");
    int intentos=0;

    while(no_acerto==true) {
      System.out.println("Ingrese un número");
      int variable=entrada.nextInt();
      if(variable>numero_buscado) {
        System.out.println("El número es muy alto");
        intentos++;
      }else if(variable<numero_buscado) {
        System.out.println("El número es muy bajo");
        intentos++;
      }else {
        System.out.println("Acertaste!");
        intentos++;
        no_acerto=false;
      }
    }
    entrada.close();

    System.out.println("El número buscado era: "+numero_buscado+" y lo obtuviste con un total de "+intentos+" intentos");

}

}

Revisamos un poco lo desarrollado, de arriba hacia abajo, tal como es el flujo natural de ejecución en Java, bueno, lo primero que hemos creado es el número aleatorio, este número aleatorio lo hemos obtenido con el uso del método estático de random de la clase Math del paquete java.lang, este método nos retorna un número aleatorio entre 0 y 1 y de tipo double, para obtener el número entre 0 y 100 basta que multipliquemos el valor que nos retorna por 100, ahora bien dado que un tipo double es esencia un decimal, nosotros vamos a restringir los resultados a valores de tipo entero, para lo cual debemos de realizar una conversión o casteo y por ello hacemos uso de (int) para tales fines.

Luego creamos la condición que estará en el while, en la línea siguiente definimos que dado que el usuario ha de ingresar datos a través del teclado, necesitamos capturarlos y esto lo hacemos a través de una instancia de la clase Scanner, finalmente creamos un contador de intentos; ahora bien, empieza la iteración dado que la condición es true, se le consulta por un número al usuario, se captura el número con la instancia de Scanner y se castea a un entero con el método nextInt(), y se evalúa en los condicionales si es mayor o es menor, o si en caso de no ser alguna de ellos, podemos tener la certeza de que es el número que estamos buscando y detenemos la iteración haciendo que la variable booleana cambie a false; en todos los componentes del condicional hacemos que los intentos se le suma una unidad aún incluso si acertamos se puede contabilizar como un intento.

No olvidemos jamás de cerrar el flujo de entrada de datos, haciendo uso del método close de la clase Scanner. Finalmente hacemos impresión de los resultados y nuestro programa habrá finalizado

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s