Bucle for-each en Java

Arrays Intermedio

for-each es otra técnica para recorrer arrays de manera sencilla, al igual que el bucle for, while, do-while; introducido en Java 5.

1. Qué es for-each

Al trabajar con arrays, es común encontrar situaciones en las que cada elemento de una matriz debe examinarse, de principio a fin. Por ejemplo, para calcular la suma de los valores contenidos en una matriz, cada elemento de la matriz debe examinarse.

Con for:

int nums[]={1,2,3,4,5};
int sum=0;

    for (int i=0; i<nums.length; i++) sum+=nums[i];

Con for-each:

int nums[]={1,2,3,4,5};
int sum=0;

    for (int x: nums) sum+=x;

La misma situación ocurre cuando se calcula un promedio, se busca un valor, se copia una matriz, etc. Debido a que tales operaciones de “inicio hasta el final” son tan comunes, Java define una segunda forma del bucle for que agiliza esta operación.

La segunda forma de for implementa un ciclo de estilo “for-each”(para cada uno). Un bucle for-each recorre una colección de objetos, como una matriz, de forma estrictamente secuencial, de principio a fin. En los últimos años, el estilo de bucle for-each ha ganado popularidad entre los diseñadores de lenguaje y programadores. Originalmente, Java no ofrecía un bucle de estilo for-each. Sin embargo, con el lanzamiento de JDK 5, el bucle for se mejoró para proporcionar esta opción.

El estilo for-each de for también se conoce como el bucle for mejorado. Ambos términos se usan en este curso.

2. Puntos Importantes for-each

Algunos puntos importantes de for-each:

  • Comienza con la palabra clave for al igual que un bucle for normal.
  • En lugar de declarar e inicializar una variable contador del bucle, declara una variable que es del mismo tipo que del array, seguido de dos puntos y seguido del nombre del array.
  • En el cuerpo del bucle, puede usar la variable del bucle que creó en lugar de usar un elemento indexado del array.
  • Se usa comúnmente para iterar sobre un array o una clase de colecciones (por ejemplo, ArrayList)

Sintaxis:

for (tipo variable : array) 
{ 
    declaraciones usando variable;
}

Es equivalente a:

for (int i=0; i<arr.length; i++) 
{ 
    tipo variable = arr[i];
    declaraciones usando variable;
}

3. Ejemplo con for-each

Ejemplo:

// Programa Java para ilustrar
// bucle for-each
class For_Each     
{
    public static void main(String[] arg)
    {
        {
            int[] marks = { 125, 132, 95, 116, 110 };
             
            int highest_marks = maximum(marks);
            System.out.println("El puntaje más alto es " + highest_marks);
        }
    }
    public static int maximum(int[] numbers)
    { 
        int maxSoFar = numbers[0];
         
        // bucle for each
        for (int num : numbers) 
        {
            if (num > maxSoFar)
            {
                maxSoFar = num;
            }
        }
    return maxSoFar;
    }
}

Salida:

El puntaje más alto es 132

4. Limitaciones del ciclo for-each

  • El bucle for-each no es apropiado cuando quiere modificar el array:
for (int num : marks) 
{
    // solo cambia num, no el elemento del array
    num = num*2; 
}
  • El bucle for-each no realiza un seguimiento del índice. Entonces no podemos obtener un índice del array usando for-each.
for (int num : numbers) 
{ 
    if (num == target) 
    {
        return ???;   // no sabe el índice de num
    }
}
  • for-each itera hacia adelante sobre el array en pasos individuales.
// esto no se puede convertir a un bucle for-each
for (int i=numbers.length-1; i>0; i--) 
{
      System.out.println(numbers[i]);
}
  • for-each no puede procesar dos declaraciones de toma de decisiones a la vez.
// esto no se puede convertir fácilmente a un bucle for-each
for (int i=0; i<numbers.length; i++) 
{
    if (numbers[i] == arr[i]) 
    { ...
    } 
}

5. Iteración sobre arrays multidimensionales

El for mejorado también funciona en arreglos multidimensionales. Recuerde, sin embargo, que en Java, los arreglos multidimensionales consisten en arrays de arrays. (Por ejemplo, una matriz bidimensional es una array de arrays unidimensionales).

Leer sobre Arrays
Arrays con ejemplos

Esto es importante cuando se itera sobre un array multidimensional porque cada iteración obtiene el siguiente array, no un elemento individual. Además, la variable de iteración en el bucle for debe ser compatible con el tipo de array que se obtiene.

Por ejemplo, en el caso de un array bidimensional, la variable de iteración debe ser una referencia a una array unidimensional. En general, cuando se usa for-each para iterar sobre un arreglo de N dimensiones, los objetos obtenidos serán arreglos de N-1 dimensiones. Para comprender las implicaciones de esto, considere el siguiente programa. Utiliza bucles anidados para obtener los elementos de un arreglo bidimensional en orden de fila, del primero al último.

// Uso de for-each para array de dos dimensiones
class DemoForEach
{
    public static void main(String args[])
    {
        int sum=0;
        int nums[][]= new int [2][3];

        //dando valores
        for (int i=0; i <2 ; i++)
            for (int j=0; j<3; j++)
                nums[i][j]=(i+1)*(j+1);

        //uso de for-each para mostrar la suma total
        for (int x[]:nums){
            for (int y:x){
                System.out.println("Valor de: "+y);
                sum+=y;
            }
        }
        System.out.println("Suma total: "+sum);

    }
}

Salida:

Valor de: 1
Valor de: 2
Valor de: 3
Valor de: 2
Valor de: 4
Valor de: 6
Suma total: 18

En el programa, preste especial atención a esta línea:

for (int x []: nums) {

Observe cómo se declara x. Es una referencia a un array unidimensional de enteros. Esto es necesario porque cada iteración de for obtiene el siguiente array en nums, comenzando con el array especificado por nums[0]. El ciclo for interno recorre cada una de estos arreglos, mostrando los valores de cada elemento.

Bucle for-each
  • Ejemplos y uso
Sending
User Review
5 (2 votes)

Sobre el Autor:

Hey hola! Yo soy Alex Walton y tengo el placer de compartir conocimientos hacía ti sobre el tema de Programación en Java, desde cero, Online y Gratis.

Deja una Respuesta

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.