A estrutura for é uma das mais utilizadas para criar loops em Java. Ela oferece uma sintaxe compacta que combina inicialização, condição de teste e atualização em uma única linha.
Os três componentes do for:
Se a condição for falsa desde o início, o bloco de código não será executado nenhuma vez.
Uma das aplicações mais comuns do loop for é acumular valores — por exemplo, somar todos os elementos de um conjunto de dados. Para entender como isso funciona por dentro, vamos acompanhar cada etapa do loop ao somar as notas de um vetor.
Fórmula geral de acumulação:
A cada volta do loop, o valor atual de soma recebe ele mesmo mais o próximo elemento n do vetor. Assim, a soma vai crescendo progressivamente a cada iteração.
Considere o seguinte vetor de notas:
Veja como o loop percorre cada nota e vai acumulando a soma, etapa por etapa:
| Iteração | Elemento atual (n) | soma (antes) | Operação | soma (nova) |
|---|---|---|---|---|
| Loop 1 | 7 | 0 | 0 + 7 | 7 |
| Loop 2 | 5 | 7 | 7 + 5 | 12 |
| Loop 3 | 6 | 12 | 12 + 6 | 18 |
| Loop 4 | 8 | 18 | 18 + 8 | 26 |
| Loop 5 | 9 | 26 | 26 + 9 | 35 |
⬆️ Após o Loop 5, todos os elementos do vetor foram percorridos. O loop encerra e o programa segue para a próxima instrução: calcular a média das notas dividindo a soma total pelo número de elementos.
Veja esse processo implementado em Java:
public class MediaNotas {
public static void main(String[] args) {
// Vetor de notas
int[] notas = {7, 5, 6, 8, 9};
// Variável acumuladora iniciada em zero
int soma = 0;
// Loop: soma = soma + n (a cada iteração)
for (int i = 0; i < notas.length; i++) {
soma = soma + notas[i];
System.out.println("Loop " + (i + 1) + ": n = " + notas[i]
+ ", soma = " + soma);
}
// Após o loop: calcula a média
double media = (double) soma / notas.length;
System.out.println("Soma total: " + soma);
System.out.println("Média das notas: " + media);
}
}
Loop 1: n = 7, soma = 7
Loop 2: n = 5, soma = 12
Loop 3: n = 6, soma = 18
Loop 4: n = 8, soma = 26
Loop 5: n = 9, soma = 35
Soma total: 35
Média das notas: 7.0
✅ Boas práticas observadas neste exemplo:
soma é sempre inicializada com zero antes do loop.notas.length para determinar automaticamente o número de elementos, evitando erros caso o vetor mude de tamanho.(double) garante que a divisão produza um resultado decimal e não inteiro.Este exemplo mostra como usar o for para contar de 1 a 10:
public class ContagemSimples {
public static void main(String[] args) {
// Contagem de 1 a 10
System.out.println("Contagem de 1 a 10:");
for (int i = 1; i <= 10; i++) {
System.out.print(i + " ");
}
// Nova linha após a contagem
System.out.println();
// Contagem regressiva de 10 a 1
System.out.println("\nContagem regressiva de 10 a 1:");
for (int i = 10; i >= 1; i--) {
System.out.print(i + " ");
}
System.out.println();
}
}
Contagem de 1 a 10:
1 2 3 4 5 6 7 8 9 10
Contagem regressiva de 10 a 1:
10 9 8 7 6 5 4 3 2 1
Dica: A variável i é frequentemente usada como contador em loops for, sendo uma abreviação da palavra "índice". Lembre-se de que essa variável só existe dentro do escopo do loop, não podendo ser acessada após o término do for.
Este exemplo utiliza o for para mostrar números pares e ímpares:
public class NumerosParesImpares {
public static void main(String[] args) {
// Imprimindo números pares de 0 a 20
System.out.println("Números pares de 0 a 20:");
for (int i = 0; i <= 20; i += 2) { // Incremento de 2 em 2
System.out.print(i + " ");
}
System.out.println();
// Imprimindo números ímpares de 1 a 19
System.out.println("\nNúmeros ímpares de 1 a 19:");
for (int i = 1; i <= 19; i += 2) { // Começa em 1 e incrementa de 2 em 2
System.out.print(i + " ");
}
System.out.println();
// Alternativa: verificando se o número é par ou ímpar dentro do loop
System.out.println("\nClassificando números de 1 a 10:");
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
System.out.println(i + " é par");
} else {
System.out.println(i + " é ímpar");
}
}
}
}
1 é ímpar
2 é par
3 é ímpar
4 é par
5 é ímpar
6 é par
7 é ímpar
8 é par
9 é ímpar
10 é par
O loop for é muito útil para tarefas como calcular e exibir tabuadas:
public class Tabuada {
public static void main(String[] args) {
// Número para o qual queremos calcular a tabuada
int numero = 7;
// Calculando e exibindo a tabuada
System.out.println("Tabuada do " + numero + ":");
for (int i = 1; i <= 10; i++) {
int resultado = numero * i;
System.out.println(numero + " x " + i + " = " + resultado);
}
// Tabuada completa de 1 a 10
System.out.println("\nTabuada completa de 1 a 10:");
// Loop externo para cada número de 1 a 10
for (int i = 1; i <= 10; i++) {
System.out.println("\nTabuada do " + i + ":");
// Loop interno para calcular a tabuada de cada número
for (int j = 1; j <= 10; j++) {
System.out.println(i + " x " + j + " = " + (i * j));
}
}
}
}
Tabuada do 7:
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
Tabuada completa de 1 a 10:
Tabuada do 1:
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
...Loops aninhados: No exemplo acima, temos um loop for dentro de outro. O loop externo controla para qual número estamos calculando a tabuada, enquanto o loop interno realiza a multiplicação por cada número de 1 a 10.
O for pode ser usado para realizar cálculos cumulativos:
public class SomaNumeros {
public static void main(String[] args) {
// Somando números de 1 a 10
int soma = 0;
for (int i = 1; i <= 10; i++) {
soma += i; // Equivalente a: soma = soma + i
System.out.println("Adicionando " + i + ": soma parcial = " + soma);
}
System.out.println("\nSoma total dos números de 1 a 10: " + soma);
// Soma dos números pares de 2 a 100
int somaPares = 0;
for (int i = 2; i <= 100; i += 2) {
somaPares += i;
}
System.out.println("\nSoma dos números pares de 2 a 100: " + somaPares);
// Cálculo do fatorial de 5 (5!)
// 5! = 5 x 4 x 3 x 2 x 1 = 120
int numero = 5;
int fatorial = 1;
for (int i = numero; i >= 1; i--) {
fatorial *= i; // Equivalente a: fatorial = fatorial * i
}
System.out.println("\nFatorial de " + numero + " (" + numero + "!) = " + fatorial);
}
}
Adicionando 1: soma parcial = 1
Adicionando 2: soma parcial = 3
Adicionando 3: soma parcial = 6
Adicionando 4: soma parcial = 10
Adicionando 5: soma parcial = 15
Adicionando 6: soma parcial = 21
Adicionando 7: soma parcial = 28
Adicionando 8: soma parcial = 36
Adicionando 9: soma parcial = 45
Adicionando 10: soma parcial = 55
Soma total dos números de 1 a 10: 55
Soma dos números pares de 2 a 100: 2550
Fatorial de 5 (5!) = 120
O for em Java é flexível e permite diferentes variações:
for-each (enhanced for)
percorrendo um array de inteiros. A cada iteração,
a variável numero recebe o próximo elemento
do array — é a sintaxe mais limpa quando o índice
i não importa para o seu código.
public class VariacoesFor {
public static void main(String[] args) {
// 1. Loop for com múltiplas variáveis
System.out.println("Loop com múltiplas variáveis:");
for (int i = 1, j = 10; i <= 5; i++, j--) {
System.out.println("i = " + i + ", j = " + j);
}
// 2. Loop for sem a parte de inicialização
System.out.println("\nLoop sem inicialização:");
int contador = 1;
for (; contador <= 5; contador++) {
System.out.print(contador + " ");
}
System.out.println();
// 3. Loop for sem a parte de atualização
System.out.println("\nLoop sem atualização:");
for (int i = 1; i <= 5;) {
System.out.print(i + " ");
i++; // Incremento feito dentro do bloco
}
System.out.println();
// 4. Loop for sem a parte de condição (loop infinito com break)
System.out.println("\nLoop 'infinito' com break:");
int count = 1;
for (;;) {
System.out.print(count + " ");
count++;
if (count > 5) {
break; // Sai do loop quando count > 5
}
}
System.out.println();
// 5. Loop for-each (enhanced for) com array
System.out.println("\nLoop for-each com array:");
int[] numeros = {10, 20, 30, 40, 50};
for (int numero : numeros) {
System.out.print(numero + " ");
}
System.out.println();
}
}
Loop com múltiplas variáveis:
i = 1, j = 10
i = 2, j = 9
i = 3, j = 8
i = 4, j = 7
i = 5, j = 6
Loop sem inicialização:
1 2 3 4 5
Loop sem atualização:
1 2 3 4 5
Loop 'infinito' com break:
1 2 3 4 5
Loop for-each com array:
10 20 30 40 50
Atenção: Loops infinitos (como for(;;)) devem ser usados com cuidado e sempre incluir uma condição de saída, como o break demonstrado no exemplo acima, para evitar que o programa trave.
O for-each, também conhecido como "enhanced for", é uma versão simplificada do loop for, introduzida no Java 5. É ideal para percorrer arrays e coleções:
public class ForEachLoop {
public static void main(String[] args) {
// Exemplo com array de inteiros
int[] numeros = {1, 2, 3, 4, 5};
System.out.println("Percorrendo array de inteiros:");
for (int numero : numeros) {
System.out.print(numero + " ");
}
System.out.println();
// Exemplo com array de Strings
String[] frutas = {"Maçã", "Banana", "Laranja", "Uva", "Morango"};
System.out.println("\nPercorrendo array de Strings:");
for (String fruta : frutas) {
System.out.println("Fruta: " + fruta);
}
// Calculando a média das notas com for-each
double[] notas = {8.5, 7.5, 9.0, 6.5, 8.0};
double soma = 0;
System.out.println("\nCalculando média das notas:");
for (double nota : notas) {
System.out.println("Nota: " + nota);
soma += nota;
}
double media = soma / notas.length;
System.out.printf("Média das notas: %.2f\n", media);
}
}
Percorrendo array de Strings:
Fruta: Maçã
Fruta: Banana
Fruta: Laranja
Fruta: Uva
Fruta: Morango
Calculando média das notas:
Nota: 8.5
Nota: 7.5
Nota: 9.0
Nota: 6.5
Nota: 8.0
Média das notas: 7,90
Principais características do for-each:
Limitações:
As instruções break e continue permitem controlar o fluxo dentro do loop for:
public class ControleLoop {
public static void main(String[] args) {
// Usando break para sair do loop
System.out.println("Exemplo com break:");
for (int i = 1; i <= 10; i++) {
if (i == 6) {
System.out.println("Encontrei o número 6! Saindo do loop...");
break; // Sai do loop quando i é 6
}
System.out.print(i + " ");
}
System.out.println("\nContinuação após o loop...");
// Usando continue para pular uma iteração
System.out.println("\nExemplo com continue:");
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
System.out.println("Pulando o número " + i + " (múltiplo de 3)");
continue; // Pula para a próxima iteração
}
System.out.print(i + " ");
}
System.out.println();
// Combinando break e continue em uma busca
System.out.println("\nBuscando número primo entre 20 e 50:");
outerLoop: // Rótulo (label) para o loop externo
for (int i = 20; i <= 50; i++) {
// Verificando se i é primo
for (int j = 2; j < i; j++) {
if (i % j == 0) {
// i não é primo, pois é divisível por j
continue outerLoop; // Continua com o próximo valor de i
}
}
// Se chegou aqui, i é primo
System.out.println("Primeiro número primo encontrado: " + i);
break; // Sai do loop após encontrar o primeiro primo
}
}
}
Exemplo com break:
1 2 3 4 5 Encontrei o número 6! Saindo do loop...
Continuação após o loop...
Exemplo com continue:
1 2 Pulando o número 3 (múltiplo de 3)
4 5 Pulando o número 6 (múltiplo de 3)
7 8 Pulando o número 9 (múltiplo de 3)
10
Buscando número primo entre 20 e 50:
Primeiro número primo encontrado: 23
Dica:
Teste seus conhecimentos sobre repetição com for em Java:
Reforce o conteúdo desta aula com mais dois exercícios práticos: