logo

Bucles en Java

El bucle en los lenguajes de programación es una característica que facilita la ejecución de un conjunto de instrucciones/funciones repetidamente mientras alguna condición se evalúa como verdadera. Java proporciona tres formas de ejecutar los bucles. Si bien todas las formas proporcionan una funcionalidad básica similar, difieren en su sintaxis y tiempo de verificación de condición.

Java proporciona tres tipos de declaraciones condicionales, este segundo tipo es una declaración de bucle.



  • mientras bucle: Un bucle while es una declaración de flujo de control que permite que el código se ejecute repetidamente en función de una condición booleana determinada. El bucle while puede considerarse como una declaración if que se repite.

Sintaxis:

while (boolean condition) { loop statements... }>

Java








/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main (String[] args) {> >int> i=>0>;> >while> (i<=>10>)> >{> >System.out.println(i);> >i++;> >}> >}> }>

>

>

Producción

0 1 2 3 4 5 6 7 8 9 10>
  • Diagrama de flujo: bucle-for-en-java
    • El bucle while comienza con la verificación de la condición booleana. Si se evaluó como verdadero, entonces se ejecutan las declaraciones del cuerpo del bucle; de ​​lo contrario, se ejecuta la primera declaración que sigue al bucle. Por esta razón también se le llama Bucle de control de entrada
    • Una vez que la condición se evalúa como verdadera, se ejecutan las declaraciones en el cuerpo del bucle. Normalmente las declaraciones contienen un valor de actualización para la variable que se procesa para la siguiente iteración.
    • Cuando la condición se vuelve falsa, el ciclo termina, lo que marca el final de su ciclo de vida.
  • en bucle: El bucle for proporciona una forma concisa de escribir la estructura del bucle. A diferencia de un bucle while, una declaración for consume la inicialización, la condición y el incremento/decremento en una línea, proporcionando así una estructura de bucle más corta y fácil de depurar.

Sintaxis:

for (initialization condition; testing condition;increment/decrement) { statement(s) }>

Java




/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main (String[] args) {> >for> (>int> i=>0>;i<=>10>;i++)> >{> >System.out.println(i);> >}> >}> }>

>

>

Producción

0 1 2 3 4 5 6 7 8 9 10>
  • Diagrama de flujo:
    hacer mientras
      Condición de inicialización: aquí inicializamos la variable en uso. Marca el inicio de un bucle for. Se puede utilizar una variable ya declarada o se puede declarar una variable, local para realizar un bucle únicamente. Condición de prueba: se utiliza para probar la condición de salida de un bucle. Debe devolver un valor booleano. También es un Bucle de control de entrada ya que la condición se verifica antes de la ejecución de las declaraciones del bucle. Ejecución de la declaración: una vez que la condición se evalúa como verdadera, se ejecutan las declaraciones en el cuerpo del bucle. Incremento/Decremento: se utiliza para actualizar la variable para la siguiente iteración. Terminación del bucle: cuando la condición se vuelve falsa, el bucle termina marcando el final de su ciclo de vida.
  • hacer mientras: El bucle do while es similar al bucle while con la única diferencia de que verifica la condición después de ejecutar las declaraciones y, por lo tanto, es un ejemplo de Salga del circuito de control.

Sintaxis:

do { statements.. } while (condition);>

Java




/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main (String[] args) {> >int> i=>0>;> >do> >{> >System.out.println(i);> >i++;> >}>while>(i<=>10>);> >}> }>

entrada estándar en c

>

>

Producción

0 1 2 3 4 5 6 7 8 9 10>
  • Diagrama de flujo:
    • El bucle do while comienza con la ejecución de la(s) declaración(es). La primera vez no se comprueba ninguna condición.
    • Después de la ejecución de las declaraciones y la actualización del valor de la variable, se verifica que la condición tenga un valor verdadero o falso. Si se evalúa como verdadero, comienza la siguiente iteración del bucle.
    • Cuando la condición se vuelve falsa, el ciclo termina, lo que marca el final de su ciclo de vida.
    • Es importante tener en cuenta que el bucle do- while ejecutará sus instrucciones al menos una vez antes de comprobar cualquier condición y, por lo tanto, es un ejemplo de bucle de control de salida.

Errores de los bucles

    Bucle infinito: uno de los errores más comunes al implementar cualquier tipo de bucle es que es posible que nunca salga, es decir, que el bucle se ejecuta durante un tiempo infinito. Esto sucede cuando la condición falla por algún motivo. Ejemplos: bucle for infinito:

Java




/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main(String[] args)> >{> >for> (;;) {> >}> >}> }>

>

>

bucle while infinito:

Java




/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main (String[] args) {> >while> (>true>)> >{> >// statement> >}> > >}> }>

>

>

Java




//Java program to illustrate various pitfalls.> public> class> LooppitfallsDemo> {> >public> static> void> main(String[] args)> >{> >// infinite loop because condition is not apt> >// condition should have been i>0.> >for> (>int> i =>5>; i !=>0>; i -=>2>)> >{> >System.out.println(i);> >}> >int> x =>5>;> >// infinite loop because update statement> >// is not provided.> >while> (x ==>5>)> >{> >System.out.println('In the loop');> >}> >}> }>

>

>

Otro problema es que podrías estar agregando algo a tu objeto de colección a través de un bucle y podrías quedarte sin memoria. Si intenta ejecutar el siguiente programa, después de un tiempo, se generará una excepción de falta de memoria.

Java




//Java program for out of memory exception.> import> java.util.ArrayList;> public> class> Integer1> {> >public> static> void> main(String[] args)> >{> >ArrayList ar =>new> ArrayList();> >for> (>int> i =>0>; i { ar.add(i); } } }>

>

>

Producción:

Exception in thread 'main' java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.util.Arrays.copyOf(Unknown Source) at java.util.ArrayList.grow(Unknown Source) at java.util.ArrayList.ensureCapacityInternal(Unknown Source) at java.util.ArrayList.add(Unknown Source) at article.Integer1.main(Integer1.java:9)>

Bucle anidado:

Bucle anidado significa una declaración de bucle dentro de otra declaración de bucle.

Hay diferentes combinaciones de bucle usando para bucle, mientras bucle, hacer mientras bucle.

Ej.1 bucle for anidado

Java




/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main (String[] args) {> >for>(>int> i =>0>; i <>3>; i++){> >for>(>int> j =>0>; j <>2>; j++){> >System.out.println(i);> >}> >System.out.println();> >}> >}> }>

>

>

Producción

0 0 1 1 2 2>

Ej.2 Bucle while anidado

Java




import> java.io.*;> class> GFG {> >public> static> void> main(String[] args)> >{> >int> i =>1>, j =>1>;> >while> (i <=>3>) {> >while> (j <=>3>) {> >System.out.print(j);> >j++;> >}> >i++;> >System.out.println(>''>);> >j =>1>;> >}> >}> }>

>

>

Producción

123 123 123>

Ej.3 Bucle do while anidado

Java




/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main(String[] args)> >{> >int> row =>1>, column =>1>;> >int> x;> >do> {> >x =>4>;> >do> {> >System.out.print(>''>);> >x--;> >}>while> (x>= fila);> >column =>1>;> >do> {> >System.out.print(column +>' '>);> >column++;> >}>while> (column <=>5>);> >System.out.println(>' '>);> >row++;> >}>while> (row <=>5>);> >}> }>

>

>

Producción

1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5>

Ej.4 Bucle anidado while y for

Java




/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main(String[] args)> >{> >int> weeks =>3>;> >int> days =>7>;> >int> i =>1>;> >// outer loop> >while> (i <= weeks) {> >System.out.println(>'Week: '> + i);> >// inner loop> >for> (>int> j =>1>; j <= days; ++j) {> >System.out.println(>' Days: '> + j);> >}> >++i;> >}> >}> }>

>

>

Producción

Week: 1 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7 Week: 2 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7 Week: 3 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7>