Veja a tabela de índices do vetor de notas usado neste exemplo:
| Linha | Pos. 0 | Pos. 1 | Pos. 2 | Pos. 3 | Pos. 4 | Pos. 5 |
|---|---|---|---|---|---|---|
| Índice | 0 | 1 | 2 | 3 | 4 | 5 |
| Elemento | 8.5 | 5.0 | 7.5 | 4.0 | 9.0 | 6.5 |
| For tradicional | notas[0] |
notas[1] |
notas[2] |
notas[3] |
notas[4] |
notas[5] |
| For-each | nota=8.5 |
nota=5.0 |
nota=7.5 |
nota=4.0 |
nota=9.0 |
nota=6.5 |
public class ContarAprovados {
public static void main(String[] args) {
double[] notas = {8.5, 5.0, 7.5, 4.0, 9.0, 6.5};
int aprovados = 0;
double notaMinima = 6.0;
// Contando quantos foram aprovados
for (double nota : notas) {
if (nota >= notaMinima) {
aprovados++;
}
System.out.println("Nota: " + nota);
}
System.out.println("Total de aprovados: " + aprovados);
System.out.println("Total de reprovados: " + (notas.length - aprovados));
}
}
Nota: 8.5
Nota: 5.0
Nota: 7.5
Nota: 4.0
Nota: 9.0
Nota: 6.5
Total de aprovados: 4
Total de reprovados: 2
| Linha | Pos. 0 | Pos. 1 | Pos. 2 | Pos. 3 | Pos. 4 |
|---|---|---|---|---|---|
| Índice | 0 | 1 | 2 | 3 | 4 |
| Elemento | true | false | true | true | false |
| For-each | resposta=true |
resposta=false |
resposta=true |
resposta=true |
resposta=false |
public class ArrayBoolean {
public static void main(String[] args) {
boolean[] respostas = {true, false, true, true, false};
int corretas = 0;
for (boolean resposta : respostas) {
if (resposta) {
corretas++;
}
System.out.println("Resposta: " + resposta);
}
System.out.println("Respostas corretas: " + corretas);
}
}
Resposta: true
Resposta: false
Resposta: true
Resposta: true
Resposta: false
Respostas corretas: 3
| Linha | Pos. 0 | Pos. 1 | Pos. 2 | Pos. 3 |
|---|---|---|---|---|
| Índice | 0 | 1 | 2 | 3 |
| Elemento | 19.99 | 45.50 | 12.30 | 67.80 |
| For-each | preco=19.99 |
preco=45.50 |
preco=12.30 |
preco=67.80 |
public class ArrayDouble {
public static void main(String[] args) {
double[] precos = {19.99, 45.50, 12.30, 67.80};
double total = 0;
for (double preco : precos) {
total += preco;
System.out.printf("Preço: R$ %.2f\n", preco);
}
System.out.printf("Total: R$ %.2f\n", total);
}
}
Preço: R$ 19.99
Preço: R$ 45.50
Preço: R$ 12.30
Preço: R$ 67.80
Total: R$ 145.59
| Característica | Loop for tradicional | Loop for-each |
|---|---|---|
| Sintaxe | Mais complexa | Mais simples |
| Legibilidade | Menos legível | Mais legível |
| Acesso ao índice | Sim | Não |
| Modificar array | Sim | Não |
| Percorrer parcialmente | Sim (controlando i) | Não |
| Percorrer de trás pra frente | Sim | Não |
| Apenas ler elementos | Sim | Sim (melhor opção) |
| Risco de erro de índice | Maior (ArrayIndexOutOfBoundsException) | Menor |
Neste exemplo, dois vetores paralelos armazenam nomes e notas dos alunos. O índice i é usado para associar alunos[i] à sua respectiva notas[i]. Por isso, é necessário o for tradicional na parte que exibe a correlação entre eles.
| Índice | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| alunos[i] | João | Maria | Pedro | Ana | Carlos |
| notas[i] | 7.5 | 9.0 | 6.0 | 8.5 | 5.5 |
public class SistemaNotas {
public static void main(String[] args) {
String[] alunos = {"João", "Maria", "Pedro", "Ana", "Carlos"};
double[] notas = {7.5, 9.0, 6.0, 8.5, 5.5};
double notaMinima = 7.0;
System.out.println("=== RELATÓRIO DE NOTAS ===");
// For tradicional: precisamos de i para acessar alunos[i] e notas[i] juntos
for (int i = 0; i < alunos.length; i++) {
String status = (notas[i] >= notaMinima) ? "APROVADO" : "REPROVADO";
System.out.println((i + 1) + ". " + alunos[i]
+ " - Nota: " + notas[i] + " - " + status);
}
// For-each: perfeito para calcular a média (não precisa do índice)
double soma = 0;
for (double nota : notas) {
soma += nota;
}
double media = soma / notas.length;
System.out.println("\nMédia da turma: " + media);
}
}
=== RELATÓRIO DE NOTAS ===
1. João - Nota: 7.5 - APROVADO
2. Maria - Nota: 9.0 - APROVADO
3. Pedro - Nota: 6.0 - REPROVADO
4. Ana - Nota: 8.5 - APROVADO
5. Carlos - Nota: 5.5 - REPROVADO
Média da turma: 7.3
Perceba: Usamos for tradicional quando precisamos do índice (para associar alunos e notas pelo mesmo i), e for-each quando só precisamos calcular a soma (sem necessidade de índice).
Um exemplo prático do mundo real: calcular o total de um carrinho e verificar quais itens estão acima de um determinado preço.
| Índice | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| produtos[i] | Arroz | Feijão | Café | Açúcar | Óleo |
| precos[i] | 8.90 | 12.50 | 22.00 | 5.70 | 9.80 |
public class CarrinhoCompras {
public static void main(String[] args) {
String[] produtos = {"Arroz", "Feijão", "Café", "Açúcar", "Óleo"};
double[] precos = {8.90, 12.50, 22.00, 5.70, 9.80};
double limite = 10.0;
System.out.println("=== CARRINHO DE COMPRAS ===");
// For tradicional: associa produto e preço pelo mesmo índice i
for (int i = 0; i < produtos.length; i++) {
String aviso = (precos[i] > limite) ? " ← acima de R$10,00" : "";
System.out.printf("%-8s R$ %5.2f%s%n", produtos[i], precos[i], aviso);
}
// For-each: soma todos os preços sem precisar do índice
double total = 0;
for (double preco : precos) {
total += preco;
}
System.out.printf("%nTotal: R$ %.2f%n", total);
}
}
=== CARRINHO DE COMPRAS ===
Arroz R$ 8.90
Feijão R$ 12.50 ← acima de R$10,00
Café R$ 22.00 ← acima de R$10,00
Açúcar R$ 5.70
Óleo R$ 9.80
Total: R$ 58.90
Regra geral: Use for-each quando precisar apenas ler os elementos. Use for tradicional quando precisar do índice, modificar o array, ou correlacionar dois vetores.
Teste seus conhecimentos com exemplos mais práticos e elaborados:
Reforce o conteúdo desta aula com mais dois exercícios práticos: