top of page

Planificación de repeticiones con Loops

     Bueno, al fín hemos llegado al segundo bloque del curso de programación en java, hoy, aprenderemos a crear loops, que en Español se podría definir mas o menos como un "bucles" o "ciclos", esto se utiliza para las ocasiones en las que queremos repetir un número de veces cierta instrucción que le demos al programa, para ello, vamos a tener tres formas para hacerlo:

 

while

for

do....while

 

 

Quezas el que mas se utilice y el primero que vamos a ver es el while, que en español se traduce como "mientras", con ella, podemos expresar tal instrucción/nes mientras se cumpla una determinada condición de tal modo que podemos decir mientras i sea menor o igual a cien imprimeme el valor de i, y sumale uno.

 

class While {
     public static void main (String [ ] args){
          int i = 0;
          while (i <= 100){
          System.out.println("i es menos a 100");
          System.out.println("el valor de i es: " + i);
          i = i + 5;
          }
     }
}

 

run:
i es menos a 100
el valor de i es: 0
i es menos a 100
el valor de i es: 5
i es menos a 100
el valor de i es: 10
i es menos a 100
el valor de i es: 15
i es menos a 100
el valor de i es: 20
i es menos a 100
el valor de i es: 25
i es menos a 100
el valor de i es: 30
i es menos a 100
el valor de i es: 35
i es menos a 100
el valor de i es: 40
i es menos a 100
el valor de i es: 45
i es menos a 100
el valor de i es: 50
i es menos a 100
el valor de i es: 55
i es menos a 100
el valor de i es: 60
i es menos a 100
el valor de i es: 65
i es menos a 100
el valor de i es: 70
i es menos a 100
el valor de i es: 75
i es menos a 100
el valor de i es: 80
i es menos a 100
el valor de i es: 85
i es menos a 100
el valor de i es: 90
i es menos a 100
el valor de i es: 95
i es menos a 100
el valor de i es: 100
GENERACIÓN CORRECTA (total time: 1 second)

 

 

 

     Disculpen la herrata, puse menos en vez de menor, pero creo que mas o menos se entiende, como ya he dicho el while realiza la misma instrucción en cada iteración, una iteración se refiere a cada uno de los ciclos que se realizan, otro que tambien podemos utilizar es la instrucción for, que ahora este si es el mas común, este unicamente nos sirve para repetir código una y otra vez mientras se esté cumpliendo una condición que nosotros mismo declaramos, inicializamos y actualizamos en el mismo ciclo for, y aqui tenemos un ejemplo muy parecido al otro.

 

 

import static java. lang. System. out;
class For {
public static void main (String [ ] args) {
    for (int contador = 1; contador <= 10; contador++){
        out. print("El valor del contador es: ");
        out. println(contador + ".");
        }
    out.println(" ¡Hecho! ");
    }
}

 

 

run:
El valor del contador es: 1.
El valor del contador es: 2.
El valor del contador es: 3.
El valor del contador es: 4.
El valor del contador es: 5.
El valor del contador es: 6.
El valor del contador es: 7.
El valor del contador es: 8.
El valor del contador es: 9.
El valor del contador es: 10.
 ¡Hecho!
GENERACIÓN CORRECTA (total time: 0 seconds)

 

 

     En este código en la única parte en la que kizas tengamos un poco de lio, puede ser en la parte del import en la primera línea, pero solo se trata de una clase preconstruida de java que en este caso la importamos para ahorrarnos el escribir cada uno de los "System" detras de cada "out.println();". Como podemos observar en el código del programa, el ciclo for está formado por tres:

 

for (int contador = 1; contador <= 10; contador++)

 

         inicialización         expresión     actualización

 

 

Y tras ello se abren y cierran llaves en donde va las ordenes que queremos que realice nuestro programa en cada una de las iteraciones o loop y el tercero que tenemos es mas bien una variación del while, el do....while, al utilizar el while puede dar el caso de que el código que esté dentro del loop no se ejecute jamas como en el juego que hay al final de la página, sin embargo, con el do....while siempre nos aseguramos de que el código se ejecute al menos una vez como en el caso que tenemos a continuación.

 

 

import java.io.File;
import static java.lang.System.out;
import java.util.Scanner;


class LoopDo {
    public static void main (String [ ] args) {
        File archivo = new File("c:\\miArchivo.txt");
        Scanner miScanner = new Scanner (System.in);

 

        char replica;
        do {
            out.print("¿Borrar Archivo? (s/ no)");
            replica = miScanner. findWithinHorizon( "." , 0) . charAt( 0) ; }


        while (replica != 's' && replica != 'n' ) ;
        if ( replica == 's' ) {
            out. println( "De acuerdo, borrando archivo. . . " );
            archivo.delete() ;
        }
    }
}

 

 

     dediquemos un momento a analizar un poco este código, utilizando una de las clases preconstruidas de java, podemos utilizarlo para eliminar un archivo, en este caso el archivo se llama, miArchivo.txt que está en el directorio C de mi ordenador, primero importamos las clases preconstruidas, y con el objeto File lo utilizamos como si se tratase de un String para crear algo parecido a una variable de tipo String lo declaramos como un nuevo File ("archivo") y le decimos que el archivo en cuestión es el documento "c\\miArchivo.txt", hacemos lo mismo con Scanner para que nos escaneé la letra que nosotros introduzcamos, declaramos una variable de tipo char a la que llamamos replica, y utilizamos el do para que la interación se ejecute al menos una vez y le decimos que el código se ejecute MIENTRAS nuestra variable replica sea diferente a 's' y an 'n' y luego declaramos que SI replica es igual a 's' que nos imprima el texto "De acuerdo, borrarndo archivo. . . " y que elimine el archivo.

 

 

 

class Switch {
     public static void main (String [ ] args) {
          char grupo = 'B';
          switch (grupo){
               case 'A':
                    System.out.println("Tienes una A. ¡Gran trabajo!");
                    break;
               case 'B':
                    System.out.println("Tienes una B. ¡Buen trabajo!");
                    break;
               case 'C':
                    System.out.println("Tienes una C. ¡Necesitas mejorar!");
                    break;
              default:
                System.out.println("Tienes una D. ¡Necesitas un gran cambio!");
          }
     }    
}

 

 

run:
Tienes una B. ¡Buen trabajo!
GENERACIÓN CORRECTA (total time: 1 second)

 

Cabe destacar que si el valor que se pone despues de la palabra case es un número no se pone entre comillas y si es un string directamente no se puede hacer, tansolo se puede con caracteres y con valores numéricos. Y para terminar os he puesto el código de un programa que lo he llamado "Reloj", el cual importa una librería de java y obtiene el valor del dia, hora, mes y año de nuestro ordenador y nos servirá como introducción para el siguiente bloque de aprendizaje en java, a parte de un par de cosas, en un principio ya tendriais que saber como funciona este programa.

 

 

import java.util.*;
class Reloj {
    public static void main (String [ ] args) {

 


        // obtener fecha y hora actual

 

        Calendar ahora = Calendar.getInstance();
        int hora = ahora.get(Calendar.HOUR);
        int minuto = ahora.get(Calendar.MINUTE);
        int mes = ahora.get(Calendar.MONTH) + 1;
        int dia = ahora.get(Calendar.DAY_OF_MONTH);
        int an = ahora.get(Calendar.YEAR);
        


        //mostrar saludo


        if (hora < 12) {
            System.out.println("Buenos Dias");


        } else if (hora < 17) {
            System.out.println("Buenas Tardes");
        }
        else{
            System.out.println("Buenas Noches");
        }
        


        // iniciar el mensaje mostrando la hora


        System.out.print("Son las: ");
        System.out.print((hora > 12) ? (hora - 12) : (hora));
        System.out.print(" horas ");
        


        // mostrar los minutos


        if (minuto != 0) {
            System.out.print(minuto + " ");
            System.out.print((minuto != 1) ? "minutos " : "minuto ");
        }

 

        // mostrar dia del mes

     

        System.out.print("del " + dia + " ");
        


        //mostrar el nombre del mes


         switch (mes) {
              case 1:
                   System.out.print("de Enero");
                   break;
              case 2:
                   System.out.print("de Febrero");
                   break;
              case 3:
                   System.out.print("de Marzo");
                   break;
              case 4:
                   System.out.print("de Abril");
                   break;
              case 5:
                   System.out.print("de Mayo");
                   break;
              case 6:
                   System.out.print("de Junio");
                   break;
              case 7:
                   System.out.print("de Julio");
                   break;
              case 8:
                   System.out.print("de Agosto");
                   break;
              case 9:
                   System.out.print("de Septiembre");
                   break;
              case 10:
                   System.out.print("de Octubre");
                   break;
              case 11:
                  System.out.print("de Noviembre");
                   break;
              case 12:
                   System.out.print("de Diciembre");
                   break;
             }

 

 

            // mostrar año

 

            System.out.println(" de " + an);
      }
}

 

 

run:
Buenos Dias
Son las: 2 horas 12 minutos del 9 de Julio de 2013
GENERACIÓN CORRECTA (total time: 1 second)

 

 

En un principio, esto de los Loops estan muy bien, pero, que es lo que sucede cuando queremos que el Loop se detenga antes de terminar el Loop...

Para ello tenemos una declaración especial llamada break, que sirve para salir del loop en el caso de que tal condición se cumpla tal y como tenemos en este ejemplo.

 

 

class SalirLoop {
    public static void main (String [ ] args) {
        int index = 0;
        while (index <= 1000){
            index = index + 20;

            System.out.println(index);
            if (index == 400) {
                System.out.println( "Saliendo del ciclo Loop." );
                break;
            }
        }
    }
}

 

run:
20
40
60
80
100
120
140
160
180
200
220
240
260
280
300
320
340
360
380
400
Saliendo del ciclo Loop.

 

 

tal y como podemos ver en el ejemplo dentro del while hay un condicional if que le dice al programa que si la variable index es igual a 400 que rompa el loop y salga, esto realmente pues no tiene ninguna dificultad, tambien tenemos otra cleraración especial que es la llamada continue muy parecida a esta que se utiliza casi que del mismo modo tal y como se muestra a continuación, el continue se utiliza para saltarse la iteración de la expresión a la que acompañe.

 

 

class LoopContinue {
    public static void main (String [ ] args) {
        int index = 0;
        while (index <= 1000) {
            index = index + 40;
            if (index == 400) {
                continue;
            }
            System.out.println( "El index tiene un valor de " + index );
        }
    }
}

 

run:
El index tiene un valor de 40
El index tiene un valor de 80
El index tiene un valor de 120
El index tiene un valor de 160
El index tiene un valor de 200
El index tiene un valor de 240
El index tiene un valor de 280
El index tiene un valor de 320
El index tiene un valor de 360
El index tiene un valor de 440
El index tiene un valor de 480
El index tiene un valor de 520
El index tiene un valor de 560
El index tiene un valor de 600
El index tiene un valor de 640
El index tiene un valor de 680
El index tiene un valor de 720
El index tiene un valor de 760
El index tiene un valor de 800
El index tiene un valor de 840
El index tiene un valor de 880
El index tiene un valor de 920
El index tiene un valor de 960
El index tiene un valor de 1000
El index tiene un valor de 1040
GENERACIÓN CORRECTA (total time: 1 second)

 

y como podemos observar en el resultado lo que ha hecho ha sido imprimir todos los números de 40 en 40 pero se ha saltado el 400 tal y como se le indica en el código.

 

Y tal y como os prometí. aqui teneis el código fuente del juego.

 

import static java. lang. System. out;
import java.util.Scanner;
import java.util.Random;
class juego {
    public static void main (String [ ] args) {
        Scanner miScanner = new Scanner(System. in);
        int numIntentos = 0;
        int numAleatorio = new Random() . nextInt(10) + 1;
        out. println("        ********  ********        ");
        out. println("Bienvenido al juego \"¡¡Acieta el número!!\"");
        out. println("        ********  ********        ");
        out. println("Escribe un número del 1 al 10");
        int numeroEscrito = miScanner. nextInt();
        numIntentos++;
        while (numeroEscrito != numAleatorio){
            out. println( );
            out. println( " Inténtalo de nuevo. . . " );
            out. println( " Escribe un número del 1 al 10: " );
            numeroEscrito = miScanner. nextInt();
            numIntentos++;
        }
        out. print( "¡¡Enhorabuena!!, has ganado despues de " );
        out. println( numIntentos + " intentos" );
    }
}

bottom of page