Inicio > Estructuras Repetitivas en Java > Java con Netbeans: Capitulo 6 – Estructuras Repetitivas

Java con Netbeans: Capitulo 6 – Estructuras Repetitivas

Estructuras Repetitivas

Son estructuras que se caracterizan porque pueden repetir varias veces la misma operación sin tener que escribirla nuevamente, mediante un bucle. Un bucle es una sentencia, y es el conjunto de acciones que se repetiran si se cumplen ciertas condiciones establecidas por el programador.

Conceptos importantes

contador: Es una variable que inicia con un valor numérico, generalmente 0 o 1, y que va aumentando o disminuyendo a condición del programa. Por ejemplo: i++, significa que la variable «i» aumentara su valor de 1 en 1.

acumulador: También es una variable, pero que , como su nombre indica, va acumulando valores diferentes. Por ejemplo: sumaDeNotas=SumaDeNotas + NotaIngresada


Existen 3 maneras de crear una estructura repetitiva. Cada una se usará de acuerdo a la necesidad del programa o función dentro de él.

 

1. Sentencia while. Permite realizar acciones si las condiciones establecidas se cumplen.

while (condicion){
Instrucciones que se ejecutan si la condicion es verdadera
}

Ejercicio 1

Crear un programa que permita un valor «n» positivo ingresado por el usuario . Luego, calcule la suma de los «n» primeros números naturales, los pares, los impares y los cuadrados. Finalmente mostrar resultados en pantalla.

Solución

Crear la siguiente interfaz.

Doble clik al boton para programar su accion:

private void btnCalcularActionPerformed(java.awt.event.ActionEvent evt) {
 int num,res,cuadrado;
 int suma=0,sumap=0,sumai=0,sumac=0;
 int contador=0;
 num=Integer.parseInt(txtNum.getText());
 contador=1;
 while(contador<=num){
 suma=suma+contador;
 res=contador%2;
 if(res==0)
 sumap=sumap+contador;
 else
 sumai=sumai+contador;
 cuadrado=contador*contador;
 sumac=sumac+cuadrado;

 contador++;
 }

 txaSalida.setText("La suma de los "+num +" primeros números naturales es:" + suma+"\n");
 txaSalida.append("La suma de los pares: " + sumap +"\n");
 txaSalida.append("La suma de los impares es:"+ sumai+"\n");
 txaSalida.append("La suma de los cuadrados es:" +sumac);
 }

Puede ejecutar su aplicación sin pormenores.


2. Sentencia do…while. Permite realizar acciones si las condiciones establecidas se cumplen, pero a diferencia de while, la condicion se evalúa despues de realizar las acciones dentro del do…while. Eso quiere decir que las acciones se ejecutarán por lo menos una vez.

 

Sintaxis

do{
 acciones a realizar;
}while(condicion);

Ejercicio 2. Creando tu «minijuego» 21

Crear una aplicación con la lógica del juego «21». En este juego, se deben sacar cartas mientras la suma sea menor o igual a 21, si la suma de los valores sobrepasa 21 entonces mostrar un mensaje que muestre «Perdio». Si se detiene la aplicación y, con la siguiente carta que iba a ser puesta en juego, no se llega a sobrepasar 21, también mostrar Perdio. Los valores de las cartas seran del 1 al 13.

Solución

Antes que nada algunas notas previas.

Para generar un número entre 1 y 13 haremos un llamado a la clase Math.random() de la siguiente manera:

int numero; //para el numero al azar
numero=Int(Math.random()*13)+1; // El int es para convertirlo a entero
//se suma +1 para que genere valores desde 1 hasta 13 y no de 0 a 12;

Crear la siguiente interfaz:

El JButton btnReiniciar solo servira para limpiar el JTextArea (txaSalida) y devolver los valores a su estado inicial (Incluyendo también poner activo el JButton btnJugar)

Doble clik al JButton (btnReiniciar) para programar su accion:

private void btnJugarActionPerformed(java.awt.event.ActionEvent evt) {
 int numero,resp;
 int suma=0;
 do{
 numero = ((int)(Math.random()*13))+1;
 suma=suma+numero;
 txaSalida.append("Numero generado: "+numero+"\t"+"Acumulado: "+suma+"\n");
 if(suma<=21){
 resp=JOptionPane.showConfirmDialog(null, "Desea Continuar?","",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
 if(resp==JOptionPane.NO_OPTION){
 numero = ((int)(Math.random()*13))+1;
 suma=suma+numero;
 txaSalida.append("El numero generado hubiera sido: "+numero  +" y el acumulado: "+suma);
 if(suma<=21){
 JOptionPane.showMessageDialog(null, "Perdiste!!!");
 }
 else{
 JOptionPane.showMessageDialog(null, "Ganaste!!!");
 }
 }
 }
 else{
 JOptionPane.showMessageDialog(null, "Perdiste...! Vuelve a intentarlo!!");
 resp=JOptionPane.NO_OPTION;
 }
 }while(resp==JOptionPane.YES_OPTION);
 btnJugar.setEnabled(false);
 }

Usamos los JOptionPane para controlar las respuestas del usuario si desea seguir jugando o no.

Hasta ahora, tal vez ésta sea la aplicación mas complicada. Pero esto es sólo el principio. Java nos ofrece muchas posibilidades, entre las cuales está crear juegos de este tipo mucho más vistosos.


3. Sentencia for. Permite crear estructuras ligeramente sencillas (En realidad es la estructura repetitiva mas sencilla de usar). Su sintaxis es:

 

for (int cont= «valor inicial»; cont <= «limite»; cont++)

Donde:

cont :  Un contador o un valor(número) entero. Sera el encargado de realizar el respectivo conteo de la cantidad de valores en el bucle.

limite : Establece el límite despues del cual, cuando la condicion ( cont <= «limite») es falsa, sale del bucle y continúa con la ejecución del resto del programa.

cont ++ : Establece el incremento (o decremento, según la necesidad) del contador ( cont ++ quiere decir cont = cont+1)

Para su mayor comprensión pasemos a unos sencillos ejemplos:

Ejercicio 3

Calcular el factorial de un número. (Si… Es un ejemplo demasiado sencillo, pero como básico es más que perfecto para ver el funcionamiento de un bucle for).

Un factorial de un número cualquiera se calcula multiplicando desde 1 hasta el mismo número. Por ejemplo:

5! = 1*2*3*4*5 = 120

Crear la siguiente interfaz:

Vista previa de la interfaz

Doble clik al botón (btnCalcular) para programar su acción:

        private void btnCalcularActionPerformed(java.awt.event.ActionEvent evt) {
        int num=0;
        float factorial=1;
        num= Integer.parseInt(txtNum.getText());
        for(int i=1;i<=num;i++)
            factorial=factorial*i;
        txtFac.setText(""+factorial);
        }

Y listo, ya puede ejecutar su aplicación. La razón de habler declarado al factorial como float es que la operación factorial resulta en números naturales demasiado grandes en expresiones pequeñas. Por ejemplo, en el ejemplo anterior el factorial de 5 resulta 120, pero si ingresamos el factorial de 11 ya nos da un resultado de 3.99168E7, valor que no podría ser contenido en el rango de int. Otra aclaración, se inicializa al factorial en 1 para que pueda darnos resultados correctos, ya que cualquier número multiplicado por 0 («cero») siempre dara cero.


Si bien es cierto que esta aplicación ha sido de las mas sencillas, se puede usar la misma solución para, por ejemplo, calcular la suma de los números naturales, el producto, suma de series de fracciones, y otras variantes más. Lo importante es establecer el inicio y los límites. Unos ejemplo más:

 

Ejercicio 4

Crear un programa que calcule los divisores de un número natural cualquier. También mostrar si el número ingresado es primo. Un número primo es aquel que solo sea divisible por 1 y por el mismo número.

Solución

La lógica de este programa es sencilla. Luego de leer el número, se debe dividir al mismo por cada número natural, desde 1 hasta el mismo número. Cada vez que el residuo sea 0, se debe mostrar el número. Finalmente, con una condicional, mostrar el respectivo mensaje (Primo o no).

Crear la siguiente interfaz:

Vista Previa

Doble clik al botón para programar su acción:

private void btnCalcularActionPerformed(java.awt.event.ActionEvent evt) {
int num=0,res=0,contDiv=0;
num= Integer.parseInt(txtNum.getText());
txtMen.setText("");
for(int i=1;i<=num;i++){
res=num % i;
if(res==0){
txtMen.append(""+i +"\n");
contDiv++;
}
}
if(contDiv==2)
txtMen.append("El número "+ num + " es primo!");
else
txtMen.append("El número "+ num + " no es primo!");
}

Y ya puede ejecutar su aplicación.

En ejecución...


 

  1. Jen Medina
    10 octubre, 2010 a las 2:00

    Me encanta la información, esta muy completa y muy sencilla de entender ojalá pronto publiques más capítulos. Muchas gracias!!!.

    • 10 octubre, 2010 a las 4:39

      Hola Jen,
      Mil gracias por tu comentario y por tu apoyo. Lamento haber tenido que dejar de redactar por un tiempo el blog, del cual me falta aun mucho mas. Espero que te haya servido y despertado interes por aprender este maravilloso lenguaje. En esta semana estaré publicando nuevos artículos, ademas de las librerias que estuve traduciendo al español.
      Me despido agradeciendo nuevamente que te hayas dado una vuelta por el blog.
      Atte.
      Yosual

  2. Cristian Cañas
    29 julio, 2011 a las 4:37

    Muy buena la info, me sirvió muchisimo, gracias por la ayuda.

  3. melisa
    17 julio, 2012 a las 22:33

    que buena eres un genio amigote

    • 18 julio, 2012 a las 4:23

      Me falta mucho pasar saber de este mundo pero gracias por el aliento 🙂

  4. jimito
    15 septiembre, 2012 a las 17:37

    facinante los ejercicios me servio mucho

    • 17 septiembre, 2012 a las 2:44

      Gracias por el comentario. Lamentablemente no he podido continuar con lo demas en Java ya que me meti mucho en lo que era el Fx. Espero poder terminar este año con lo mas importante que considero de lo basico de Java y poder empezar un nivel intermedio. Aun asi cualquier consulta sobre Java me la pueden mandar a mi correo o escribir en el blog que gustoso ayudare. Saludos!

  5. VIANEY VARGAS
    24 diciembre, 2012 a las 18:56

    excelente men muchas gracias quisiera todos los problemas que estan en JAVAYA pero Resueltos en Formularios netbeans te agradezco y de antemano Feliz navidad

  6. 28 diciembre, 2012 a las 5:45

    interesante gracias por la ayuda

  7. 2 febrero, 2013 a las 14:21

    amigo gracias por tu ayuda….. Genial,, gracias por compartir tu conociemiento.

  8. VIANEY VARGAS
    16 febrero, 2013 a las 15:39

    amigo necesito mas ejemplos si podrias hacer el favor???? el problema de JAVAYA estructura repetitiva do while la solucion del problema sobre el banco, como se haria con el ciclo do while en una iterfaz??? te agradezco por su atencion

  9. vianey
    8 abril, 2013 a las 13:32

    Amigo de casualidad no tienes un proyecto donde expliques como recorrer un Jcombobox que esta llenado desde un campo de mi base de datos esto para cuando yó de clik en el boton buscar me seleccione el item de la busquedad que quiero mostrar?? te lo agradeco si me lo compartes

  10. vianey
    8 abril, 2013 a las 14:01

    ASI ES QUE SE DEBE EXPLICAR LOS PROBLEMAS BIEN SENCILLOS Y SUSTANCIOSOS Y FACILES PARA PODERLOS ENTERDER TE AGRADEZCO MEN POR SU AYUDA Y EL COMPARTIR TUS CONOCIEMIENTOS…

  11. vianey
    12 abril, 2013 a las 13:34

    amigo muchisimas gracias desde Colombia te agradecemos bastante sigue asi y que Dios te de mas conocimiento y lo puedas compartir con los demas…. muchisimas gracias por permitir que los demas aprendan….

    • 24 junio, 2013 a las 5:39

      Gracias por el comentario. Lamentablemente los estudios me quitan todo el tiempo y no voy a poder compartir todo lo que quisiera. Espero sepan comprender pero sigan mandando sus consultas. Yo les envio los archivos por privado como siempre. Saludos!

  12. 24 junio, 2013 a las 16:28

    ok GRacias

  13. 13 agosto, 2013 a las 17:36

    oe amigo porfavor me puedes ayudar como sumar la cantidad de piezas que me ingresen osea si van a digitar 5 q pida al usuario la longitud de la pieza eso lo se por consola netbeans y no se porque por swing no me da???? sumar la cantidad de piezas cuya longitud este entre >=1.20 y <=1.30 porfavor necesito ayuda si puedes.. gracias y porfavor vvvvianey@gmail.com

    • 26 agosto, 2013 a las 0:19

      Amigo disculpa la demora, si entiendo el problema diria que quieres un programa que te pida las piezas, las dimensiones, y en base a ello aplicar una condicional cuya longitud este entra >=1.20 y <=1.30, si es asi basta, con 3 cajas de texto, un boton que haga el procedimiento de pedir la informacion y otro que la resuelva, y una etiqueta que muestre el resultado, me gustaria ver tu codigo fuente para ver cual es el error. Saludos disculpa la demora

      • 18 marzo, 2014 a las 3:22

        Saludos, lo que deseo aprender es como ingresar muchos numeros en un JTextfield y como mostrar la suma y el promedio por decir algo… eso me pasa igual el del problema de la Longitud entre esos dos rangos espero respuesta porfavor….

  14. 21 octubre, 2013 a las 15:27

    AMIGO COORDIAL SALUDO COMO HICIERA PARA INGRESAR 30 VALORES NUMERICOS EN UN SOLO JTEXTFIELD DE JAVA Y LUEGO MOSTRAR LA SUMA??? porfavor

  1. 27 agosto, 2010 a las 20:50

Replica a vianey Cancelar la respuesta