CodeGym /Blog Java /Random-ES /Bucles anidados de Java
Autor
John Selawsky
Senior Java Developer and Tutor at LearningTree

Bucles anidados de Java

Publicado en el grupo Random-ES
Java, como la mayoría de los demás lenguajes de programación, admite bucles anidados. Esto significa solo un bucle dentro de un bucle. En este artículo, vamos a descubrir cómo trabajar con bucles anidados en Java.

Bucles anidados de Java

Un bucle se llama anidado si se coloca dentro de otro bucle. En la primera pasada, el bucle exterior llama al bucle interior, que se ejecuta hasta el final, después de lo cual el control se transfiere al cuerpo del bucle exterior. En el segundo pase, el bucle exterior vuelve a llamar al interior. Y así sucesivamente hasta que termine el bucle exterior. Hay cuatro tipos de bucles en Java:
  • para bucle

  • mientras bucle

  • hacer... mientras bucle

  • para cada bucle

Todos ellos admiten bucles anidados. Las construcciones de bucle anidado se utilizan cuando se deben cumplir dos condiciones, una que depende de la otra. Por ejemplo, si necesita mostrar una matriz bidimensional, una semipirámide o una tabla de multiplicar.

Cómo funcionan los bucles anidados de Java

Probablemente el bucle más usado en Java sea for , en gran parte porque es bastante versátil y el código que contiene es bastante fácil de leer. Aquí está la sintaxis general para bucle for anidado:

// outer loop
for (initialization; condition; increment) {
  //write here your code 

  //nested loop
  for(initialization; condition; increment) {
    //write here your code
  }
..
}
¿Cómo trabaja? Comienza el bucle exterior. Luego, el ciclo for anidado comienza el trabajo y pasa por su índice hasta que se cumple la condición, y nuevamente pasa el trabajo al ciclo externo, y esto sucede hasta que se cumple la condición del ciclo externo. Suena un poco complicado, ¿no? Bueno, será mucho más fácil de entender con un ejemplo específico, así que pasemos a eso.

Ejemplo de código anidado para bucle

Aquí hay un ejemplo clásico. Imprimamos una media pirámide usando dos bucles for . Uno de ellos está anidado.

public class NestedLoopsDemo1 {

   public static void main(String[] args) {

       for (int i = 0; i < 10; i++) {
           for (int j = 0; j<=i;  j++)
               System.out.print("*");
           System.out.println();
       }
      
   }
}
La salida es:
* ** *** **** ***** ****** ******* ******** ********* **********

Ejemplo de código de ciclo while anidado


public class NestedLoopsDemo2 {

   public static void main(String[] args) {

       int i = 0;
       while (i < 10) {
           int j = 0;
           while (j <= i) {
               System.out.print("*");
               j++;
           }
           System.out.println();
           i++;

       }
   }
}
El resultado es el mismo que en el ejemplo anterior:
* ** *** **** ***** ****** ******* ******** ********* **********
El ciclo do...while es similar al ciclo while . La principal diferencia es que el cuerpo del bucle do...while se ejecuta una vez antes de comprobar la expresión.

Ejemplo de código de bucles foreach anidados

for-each loop se puede anidar como de costumbre for loop. Este es el ejemplo de bucle for-each anidado que itera una matriz bidimensional.

public class NestedLoops2 {

       public static void main(String[] args)
       {
           int[][] mainArray = { {5, 4, 3, 2, 1}, {7, 8, 9, 10, 11} };

           for (int[] myArray : mainArray)
           {
               for (int i : myArray)
               {
                   System.out.print(i+" ");
               }
               System.out.println("");
           }
       }
}
La salida es:
5 4 3 2 1 7 8 9 10 11

Ejemplo de bucle mixto for y while

A veces podemos anidar diferentes tipos de bucles unos dentro de otros. Por ejemplo, for inside while o for inside for-each . Sin embargo, no es la mejor práctica de programación. Tales construcciones perjudican significativamente la legibilidad del código. Entonces, los programadores profesionales intentan no mezclar uno con el otro. Bueno, lo hacen, pero solo si es realmente necesario. Y una pequeña regla más: si elige entre while y for , utilice for siempre que sea posible. Sin embargo, aquí vamos a tener un ejemplo del uso de un bucle for dentro del while . Construyamos de nuevo nuestra semipirámide.

public class NestedLoopsDemo2 {

   public static void main(String[] args) {
       int i = 0;
       while (i < 10) {
           for (int j = 0; j <= i; j++) {
               System.out.print("*");
           }
           System.out.println();
           i++;

       }
   }
}
La salida no tiene sorpresas:
* ** *** **** ***** ****** ******* ******** ********* **********
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION