CodeGym /Blogue Java /Random-PT /Para cada loop em Java
John Squirrels
Nível 41
San Francisco

Para cada loop em Java

Publicado no grupo Random-PT

O que é um loop for-each?

Um for-each é um tipo de loop for que você usa quando precisa processar todos os elementos de uma matriz ou coleção. Dito isso, a frase for-each não é realmente usada neste loop. Sua sintaxe é a seguinte:

for (type itVar : array) 
{ 
    // Operations
}
Onde type é o tipo da variável iteradora (que corresponde ao tipo de dados dos elementos no array!), itVar é seu nome e array é um array (outras estruturas de dados também são permitidas, por exemplo, algum tipo de coleção, como ArrayList ), ou seja, o objeto no qual o loop é executado. Como você pode ver, esta construção não usa um contador: a variável iteradora simplesmente itera sobre os elementos do array ou coleção. Quando esse loop é executado, a variável do iterador recebe sequencialmente o valor de cada elemento da matriz ou coleção, após o qual o bloco especificado de instruções (ou instrução) é executado.

Além do loop for-each, Java também possui um método forEach(). Você pode ler sobre isso no artigo intitulado "Pare de escrever loops!" As 10 melhores práticas para trabalhar com coleções no Java 8

Observação:um loop for-each pode ser aplicado a arrays e quaisquer classes que implementem a interface java.lang.Iterable . O loop for a seguir seria equivalente ao código acima:

for (int i=0; i < array.length; i++) 
{ 
    
    // Statements 
}

Exemplo de loop for-each

Criamos uma matriz de pontuações dos alunos. Em seguida, usamos um loop for-each para imprimir todas as estimativas, calcular a pontuação média e encontrar a pontuação máxima.

public class ForEachTest {
    
// A method that prints all scores     
public static void printAllScores(int[] scores) {
        System.out.print("|");
        for (int num : scores) {

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

// A method that displays the average score 
    
public static double getAverageScore(int[] numbers) {
        int totalScore = 0;

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

    }
// A method that determines the best (maximum) score 
    public static int getBestScore(int[] numbers) {
        int maxScore = numbers[0];

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

public static void main(String[] args) {
      
// Array of scores 
int[] scores = {5, 10, 7, 8, 9, 9, 10, 12};

        
  int bestScore = getBestScore(scores);
        System.out.print("All the scores: ");
        printAllScores(scores);
        System.out.println("The highest score is " + bestScore);
        System.out.println("The average score is " + getAverageScore(scores));
    }

}
Saída do programa:

All the scores: |5|10|7|8|9|9|10|12|
The highest score is 12
The average score is 8.75
Agora, vamos ver como seria um método para imprimir todas as partituras se usássemos um loop for comum:

public static void printAllScores(int[] scores) {
        System.out.print("|");
        for (int i = 0; i < scores.length; i++) {

            System.out.print(scores[i] + "|");
        }
        System.out.println();
    }
Se chamarmos este método a partir do método principal , obteremos este resultado:

All the scores: |5|10|7|8|9|9|10|12|

Exemplo de loop for-each com coleções

Criamos uma coleção de nomes e exibimos todos os nomes na tela.

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);
        }

Limitações de um loop for-each

A forma compacta do loop for-each é considerada mais fácil de ler do que um loop for , e é considerada uma boa prática usar um loop for-each sempre que possível. No entanto, um loop for-each é uma construção menos universal do que um loop for comum . Aqui estão alguns casos simples em que um loop for-each não funcionará ou funcionará, mas apenas com dificuldade.
  1. Se você deseja executar um loop do final ao início. Ou seja, não há um loop for-each que seja um análogo direto do código a seguir:

    
    for (int i= array.length-1; i>0; i--) 
    {
          System.out.println(array[i]);
    }
    
  2. For-each não é adequado se você deseja fazer alterações em uma matriz. Por exemplo, você não pode classificar um array sem alterar a localização de seus elementos. Além disso, no código a seguir, apenas a variável do iterador será alterada, não o elemento do array:

    
    for (int itVar : array) 
    {
        itVar = itVar++; 
    }
    
  3. Se você está procurando um elemento em um array e precisa retornar (ou passar adiante) o índice do elemento que está procurando, então é melhor usar um loop for comum .

Um vídeo útil sobre o loop for-each

Loops no curso CodeGym

No CodeGym, começamos a praticar o uso de loops no nível 4 da missão Java Syntax . Várias das lições desse nível, bem como muitas das tarefas em vários níveis, são dedicadas a loops para reforçar suas habilidades em trabalhar com eles. Basicamente, não há como escapar deles — os loops são uma das construções mais importantes da programação.

Mais informações sobre loops for-each e outros

  1. A instrução while . O artigo trata do tipo mais simples de loop: o whileloop, que o CodeGym usa para apresentar loops aos alunos.
  2. Pare de escrever loops! As 10 melhores práticas para trabalhar com coleções em Java 8 . Este artigo ajudará os alunos do CodeGym que estão pelo menos na metade do curso a aprender muitas coisas interessantes sobre como trabalhar com coleções.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION