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 type
está o tipo da variável iterativa (o mesmo que o tipo de dados no array!), itVar
está o seu nome, array
está 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 ” |
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.-
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]); }
-
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++; }
-
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 JavaRushNo 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:
- 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).
- 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. - 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.
GO TO FULL VERSION