JavaRush /Blog Java /Random-ES /bucle para cada uno en Java

bucle para cada uno en Java

Publicado en el grupo Random-ES

¿Qué es foreach en Java?

For-each es un tipo de bucle for que se utiliza cuando necesita procesar todos los elementos de una matriz o colección. "Para cada uno" se traduce del inglés como "para todos". En realidad, la frase foreach en sí no se utiliza en este bucle. Su sintaxis es la siguiente:
for (type itVar : array)
{
    Блок операторов;
}
¿Dónde typeestá el tipo de la variable iterativa (igual que el tipo de datos en el array!), itVares su nombre, arrayes el array (también puede haber otra estructura de datos, algún tipo de colección, por ejemplo ArrayList), es decir, el Objeto sobre el que se ejecuta el bucle. Como puede ver, en este diseño no se utiliza un contador; la variable de iteración itera sobre los elementos de una matriz o colección, y no sobre los valores del índice. Al ejecutar dicho bucle, a la variable de iteración se le asigna secuencialmente el valor de cada elemento de la matriz o colección, después de lo cual se ejecuta el bloque de declaraciones (o declaración) especificado.

Además del bucle for-each, Java también tiene un método forEach(). Puedes leer sobre esto, por ejemplo, en el artículo "¡ Deja de escribir ciclos!" Los 10 mejores métodos para trabajar con colecciones en Java 8 "

Atención:El bucle for-each se puede aplicar a matrices y a cualquier clase que implemente la interfaz java.lang.Iterable. El equivalente del código anterior sería el siguiente bucle for :
for (int i=0; i<array.length; i++)
{

    Блок операторов;
}

Ejemplo de Java para cada uno

Creemos una serie de calificaciones de los estudiantes. Luego, usando for-each, imprimimos todos los puntajes, mostramos el puntaje promedio y encontramos el puntaje máximo.
public class ForEachTest {

//método que imprime todas las calificaciones
public static void printAllGrades(int[] grades) {
        System.out.print("|");
        for (int num : grades) {

            System.out.print(num + "|");
        }
        System.out.println();
    }

//método que muestra la puntuación media

public static double midGrade(int[] numbers) {
        int grade = 0;

        for (int num : numbers) {
            grade = num + grade;
        }
        return ((double) grade / numbers.length);

    }
//método en el que se calcula la mejor puntuación (máxima)
    public static int bestGrade(int[] numbers) {
        int maxGrade = numbers[0];

        for (int num : numbers) {
            if (num > maxGrade) {
                maxGrade = num;
            }
        }
        return maxGrade;
    }

public static void main(String[] args) {

//matriz de calificaciones
int[] grades = {5, 10, 7, 8, 9, 9, 10, 12};


  int highest_marks = bestGrade(grades);
        System.out.print("All the grades: ");
        printAllGrades(grades);
        System.out.println("The highest grade is " + highest_marks);
        System.out.println("The average grade is " + midGrade(grades));
    }

}
Salida del programa:
All the grades: |5|10|7|8|9|9|10|12|
The highest grade is 12
The average grade is 8.75
Ahora veamos cómo se vería un método para imprimir todas las partituras, hecho usando un bucle for normal:
public static void printAllGrades(int[] grades) {
        System.out.print("|");
        for (int i = 0; i < grades.length; i++) {

            System.out.print(grades[i] + "|");
        }
        System.out.println();
    }
Si llamamos a este método desde el método main, obtendremos el resultado:
All the grades: |5|10|7|8|9|9|10|12|

Un ejemplo de uso de un bucle para cada con colecciones

Creemos una colección de nombres y mostremos todos los nombres en la pantalla.
List<String> names = new ArrayList<>();
        names.add("Snoopy");
        names.add("Charlie");
        names.add("Linus");
        names.add("Shroeder");
        names.add("Woodstock");

        for(String name : names){
            System.out.println(name);
        }

Limitaciones del bucle para cada

La forma compacta de for-each se considera más legible que for, y se considera una buena práctica utilizar for-each donde se pueda hacer. Sin embargo, for-each es una construcción menos versátil que for-normal. A continuación se muestran algunos casos simples en los que el uso de for-each no funcionará en absoluto o funcionará, pero con dificultad.
  1. Si desea recorrer un bucle de principio a fin. Es decir, no existe un análogo directo para cada uno del siguiente código:

    for (int i = array.length - 1; i >= 0; i--)
    {
          System.out.println(array[i]);
    }
  2. For-each no es adecuado si desea realizar cambios en una matriz. Por ejemplo, no será posible ordenar una matriz sin intercambiar sus elementos. O, en el siguiente código, no es el elemento de la matriz el que cambiará, sino sólo la variable de iteración:

    for (int itVar : array)
    {
        itVar = itVar++;
    }
  3. Si está buscando un elemento en una matriz y necesita devolver (o transmitir) el índice del elemento que está buscando, es mejor utilizar un bucle for normal.

Video útil sobre for-each preparado por un estudiante de JavaRush

Bucles en el curso JavaRush

En JavaRush, comenzamos a usar bucles en la práctica en el nivel 4 de la búsqueda de sintaxis de Java . Hay varias conferencias dedicadas a ellos, así como muchas tareas de diferentes niveles para fortalecer las habilidades para trabajar con ellos. En general, no puedes escapar de ellos; los bucles son una de las construcciones más importantes en programación.

Más sobre bucles for-each y:

  1. For y For-Each Loop: la historia de cómo iteré, iteré, pero no iteré : un buen artículo detallado sobre los bucles for y for-each en Java. Diseñado para un lector capacitado (aproximadamente JavaRush nivel 10 y superior).
  2. Mientras que la declaración . El artículo está dedicado al ciclo más simple whilecon el que comenzará a familiarizarse con los ciclos en JavaRush.
  3. ¡Deja de escribir ciclos! Los 10 mejores métodos para trabajar con colecciones en Java 8 . A partir de este artículo, un estudiante de JavaRush que ya haya completado la mitad del curso o más aprenderá mucho sobre cómo trabajar con colecciones.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION