JavaRush /Blogue Java /Random-PT /para cada loop em Java

para cada loop em Java

Publicado no grupo Random-PT

O que é foreach em Java?

For-each é um tipo de loop for usado quando você precisa processar todos os elementos de um array ou coleção. “For each” é traduzido do inglês como “para todos”. Na verdade, a frase foreach em si não é usada neste ciclo. Sua sintaxe é a seguinte:
for (type itVar : array)
{
    Блок операторов;
}
Onde typeestá o tipo da variável iterativa (o mesmo que o tipo de dados no array!), itVarestá o seu nome, arrayestá o array (pode haver também outra estrutura de dados, algum tipo de coleção, por exemplo ArrayList), ou seja, o objeto no qual o loop é executado. Como você pode ver, um contador não é usado neste design; a variável de iteração itera sobre os elementos de uma matriz ou coleção, e não sobre os valores do índice. Ao executar tal loop, a variável de iteração recebe sequencialmente o valor de cada elemento da matriz ou coleção, após o qual o bloco de instruções (ou instrução) especificado é executado.

Além do loop for-each, Java também possui um método forEach(). Você pode ler sobre isso, por exemplo, no artigo “ Pare de escrever ciclos!” Os 10 melhores métodos para trabalhar com coleções em Java 8

Atenção:O loop for-each pode ser aplicado a arrays e quaisquer classes que implementem a interface java.lang.Iterable. O equivalente ao código acima seria o seguinte for loop :
for (int i=0; i<array.length; i++)
{

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

Exemplo de Java foreach

Vamos criar uma série de notas dos alunos. Então, usando for-each, imprimimos todas as pontuações, exibimos a pontuação média e encontramos o máximo delas.
public class ForEachTest {

//method that prints all grades
public static void printAllGrades(int[] grades) {
        System.out.print("|");
        for (int num : grades) {

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

//method that displays the average score

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

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

    }
//method in which the best (maximum) score is calculated
    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) {

//array of ratings
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));
    }

}
Saída do programa:
All the grades: |5|10|7|8|9|9|10|12|
The highest grade is 12
The average grade is 8.75
Agora vamos ver como seria um método para imprimir todas as pontuações, feito usando um loop for regular:
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();
    }
Se chamarmos este método a partir do método main, obteremos o resultado:
All the grades: |5|10|7|8|9|9|10|12|

Um exemplo de uso de um loop for-each com coleções

Vamos criar uma coleção de nomes e exibir 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 do loop for-each

A forma compacta de for-each é considerada mais legível do que for, e é considerada uma boa prática usar for-each onde isso puder ser feito. No entanto, for-each é uma construção menos versátil do que for regular. Aqui estão alguns casos simples em que usar for-each não funcionará ou funcionará, mas com dificuldade.
  1. Se você quiser fazer um loop do fim ao começo. Ou seja, não existe um análogo direto para cada para o seguinte código:

    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 um array. Por exemplo, não será possível ordenar um array sem trocar seus elementos. Ou, no código a seguir, não será alterado o elemento do array, mas apenas a variável de iteração:

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

Vídeo útil sobre for-each preparado por um aluno JavaRush

Loops no curso JavaRush

No JavaRush, começamos a usar loops na prática no nível 4 da missão Java Syntax . São diversas palestras dedicadas a eles, bem como muitas tarefas de diferentes níveis para fortalecer as habilidades de trabalho com eles. Em geral, você não pode escapar deles; os loops são uma das construções mais importantes na programação.

Mais sobre for-each e loops:

  1. Loop For e For-Each: a história de como iterei, iterei, mas não iterei - um bom artigo detalhado sobre loops for e for-each em Java. Projetado para um leitor treinado (aproximadamente JavaRush nível 10 e superior).
  2. Enquanto declaração . O artigo é dedicado ao ciclo mais simples while, com o qual você começa a se familiarizar com os ciclos do JavaRush.
  3. Pare de escrever ciclos! Os 10 melhores métodos para trabalhar com coleções em Java 8 . Com este artigo, um aluno JavaRush que já concluiu metade do curso ou mais aprenderá muito sobre como trabalhar com coleções.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION