Aprendiendo JAVA (VI)


java7.jpg

El bucle WHILE al contrario del bucle DO – WHILE primero evalúa la condición y después se ejecuta. Esto puede llevar a que, si en la primera evaluación la condición no se cumple, el bucle no se ejecutara nunca.

Abriremos nuestro editor Eclipse y crearemos un nuevo proyecto al que llamaremos quinto y al que añadiremos una clase llamada whle. Para comprobar lo dicho añadiremos el siguiente código:

  1. public class whle {
  2. void EntroBucle(){
  3. int primero=20;
  4. int segundo=30;
  5. boolean Entro=false;
  6. while(primero>segundo){
  7. System.out.println("Entro");
  8. Entro=true;
  9. }
  10. if(!Entro){
  11. System.out.println("No Entro");
  12. }
  13. }
  14. }

En este código creamos un método void, es decir que no devuelve ningún valor. En el bucle while evaluamos la expresión primero mayor que segundo. Esta condición no se cumplirá nunca, así que el bucle no se ejecutara ninguna vez.

También podemos comprobar que no hemos creados ningún método del tipo:

  1. Whle{
  2. Codigo;
  3. }

Es decir esta clase no tiene constructor. Si una clase no tiene constructor java le otorga un constructor por defecto, que es un constructor vacío.

Para probar este código creamos la clase testwhli como de costumbre seleccionando la opción public static void main(String[] args) y ponemos el siguiente código:

  1. public static void main(String[] args) {
  2. whle MiBucleWhile = new whle();
  3. MiBucleWhile.EntroBucle();
  4. }

El resultado sera:

noentro.JPG

En cambio se modificamos la línea 6 del código en la que se efectúa la evaluación de la condición y le ponemos: primero menor que segundo. El resultado será y NO os aconsejo que lo EJECUTÉIS porque nos encontramos ante un bucle sin fin. Dado que primero siempre será menor que segundo, si no ponemos alguna condición dentro del bucle que nos haga salir del mismo nunca parara.

entro.JPG

También existen otros casos curiosos y útiles como son por ejemplo los bucles WHILE sin ningún cuerpo de código, es decir vacíos.

Imaginemos que debemos encontrar el punto medio entre dos números que nos de un usuario. Podríamos crear un método al que llamaríamos PuntoMedio cuyo código quedaría más o menos así:

  1. void PuntoMedio(){
  2. System.out.println("*****************************");
  3. System.out.println("Introduce un numero");
  4. PrimerNumero = sc.nextInt();
  5. System.out.println("Introduce otro numero");
  6. SegundoNumero = sc.nextInt();
  7. if (PrimerNumero<SegundoNumero){
  8. while(++PrimerNumero < --SegundoNumero);//sin cuerpo
  9. System.out.println("El punto medio es " + PrimerNumero);
  10. System.out.println("El punto medio es " + SegundoNumero);
  11. }
  12. else{
  13. while(++SegundoNumero < --PrimerNumero);
  14. System.out.println("El punto medio es " + PrimerNumero);
  15. System.out.println("El punto medio es " + SegundoNumero);
  16. }
  17. }

En primer lugar precisamos importa la clase util de java, import java.util.*;, para poder utilizar la clase Scanner, Scanner sc = new Scanner(System.in);, y capturar los datos que entran por el teclado.

El método PuntoMedio que devuelve ningún valor. Lo más destacable del método es el bucle WHILE que no tiene cuerpo de código, sencillamente porque no lo precisa. El bucle va dando vueltas hasta que se cumpla la condición y es en ese momento cuando tomamos los valores de las variables para mostrarlos por la consola.

Para probarlo deberemos añadir a la clase testwhli una nueva línea de código y comentar la línea anterior:

  1. //MiBucleWhile.EntroBucle();
  2. BucleWhile.PuntoMedio();
sincuerpo.JPG

Respecto a los bucles solo nos queda por ver una variante del bucle FOR que en java se ha dado por llamar for mejorado y que en otros lenguajes se le conoce como FOR – EACH. En algunos lenguajes existe la palabra reservada for para un bucle y la palabra reservada foreach para el otro bucle for. En java ambos bucles se denominan for, solo cambia la sintaxis de los mismo.

Un bucle del tipo for – each o for mejorado es ideal para recorrer colecciones de objetos o de cualquier otro tipo de valores desde principio a fin. Como aun no hemos tratado el tema de las colecciones haremos una prueba con un array, aunque de hecho tampoco hemos tratado las array. Añadiremos un nuevo método a la clase whle:

  1. void NuevoFor(){
  2. int Numero[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
  3. int Suma=0;
  4. //for clasico
  5. for(int indice=0; indice<10; indice++){
  6. Suma=Suma + Numero[indice];
  7. }
  8. System.out.println("Total con for clasico " + Suma);
  9. Suma=0;
  10. System.out.println("Suma reinicializada vale " + Suma);
  11. for(int valor: Numero){
  12. Suma += valor;
  13. }
  14. System.out.println("Total con for mejorado " + Suma);
  15. }

Como podemos ver creamos un array de números enteros, que posteriormente recorremos en el for clasico mientras vamos sumando todos sus valores y mostramos el total en la consola. Posteriormente reiniciamos a 0 la variable Suma y utilizamos el for mejorado para realizar la misma operación. Recorremos el array sumando sus elementos y mostrando el total por la consola.

En la sintaxis del for mejorado encontramos en primer lugar int valor. Como podemos comprobar la variable valor es del mismo tipo (integer) que el array Numero ya que recibirá los elementos del array, uno a uno en cada iteración, sin necesidad de una variable contador. Después de los dos puntos se colocara el nombre de la colección a recorrer, en este caso el array Numero.

Para probar este método añadiremos una nueva línea a la clase testwhli y comentaremos las anteriores.

  1. //MiBucleWhile.EntroBucle();
  2. //MiBucleWhile.PuntoMedio();
  3. MiBucleWhile.NuevoFor();

El resultado de la aplicación será el siguiente:

nuevofor.JPG

Y hasta aquí las sentencias de repetición o bucles. En el próximo post veremos algunas caracteristicas de las array.

Enlaces interesantes

  • ¿Qué te ha parecido el artículo?

  • Compartir

    Comparte tu opinión ahora


Relacionados con Aprendiendo JAVA (VI)

Temas sobre Aprendiendo JAVA (VI)

Opiniones sobre Aprendiendo JAVA (VI)

Hace 6 años y 12 meses

En el metodo punto medio, para que compile hay que añadir:
int PrimerNumero;
int SegundoNumero; (para que sepa el tipo de dato)

y la cabecera del primer IF del mismo metodo seria:
if (PrimerNumero SegundoNumero)



como los anteriores genial tuto, muchas gracias


Hace 6 años y 11 meses

Hemos comprobado que el formato automático del código cortaba partes de las líneas de mismo, creando un código incorrecto.
Ya hemos solucionado el problema y se ha repasado todo el código publicado, esperamos que de ahora en adelante se formatee de forma correcta. De todos modos si alguien observar algo extraño agradecemos siempre los avisos. Gracias a todos y disculpar las molestias.


Opina sobre Aprendiendo JAVA (VI)

Nombre:

Tu email:

Página web (si tienes):

Opinar:

Escoge el recuadro negro: para evitar spam