AFF Education Construa seu Futuro

Aula 41 - Repetição (loop) com for

A Estrutura de Repetição for

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.

for (inicialização; condição; atualização)
↓ condição verdadeira
Bloco de código
↑ atualização

Os três componentes do for:

  1. Inicialização: Executada uma única vez, no início.
  2. Condição: Verificada antes de cada iteração.
  3. Atualização: Executada após cada iteração.

Se a condição for falsa desde o início, o bloco de código não será executado nenhuma vez.

Como o Loop Acumula Valores: Soma de Notas Passo a Passo

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:

soma = soma + n

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:

notas[] = { 7, 5, 6, 8, 9 }

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.

média = soma ÷ quantidade  →  35 ÷ 5 = 7.0

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:

Exemplo Básico: Contagem

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.

Exemplo: Números Pares e Ímpares

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

Números pares de 0 a 20:

0 2 4 6 8 10 12 14 16 18 20

Números ímpares de 1 a 19:

1 3 5 7 9 11 13 15 17 19

Classificando números de 1 a 10:

1 é ímpar

2 é par

3 é ímpar

4 é par

5 é ímpar

6 é par

7 é ímpar

8 é par

9 é ímpar

10 é par

Exemplo: Calculando a Tabuada

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.

Exemplo: Soma dos Números

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

Variações do Loop for

O for em Java é flexível e permite diferentes variações:

Diagrama do for-each (enhanced for) iterando sobre array de inteiros
Figura 5 — Visualização do 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 Loop for-each

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 inteiros:

1 2 3 4 5

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:

Controlando o Loop com break e continue

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:

Exercícios

Teste seus conhecimentos sobre repetição com for em Java:

1. Qual é a ordem de execução das três partes do loop for?

2. Qual será a saída do seguinte código?

for (int i = 0; i < 5; i++) {
    if (i == 3) {
        continue;
    }
    System.out.print(i + " ");
}

3. Qual é a principal diferença entre o for tradicional e o for-each?

4. O que acontece se omitirmos todas as três partes do for, como em for(;;)?

5. Complete o código para calcular a soma dos números pares de 2 a 20:

int soma = 0;
for (_____________________) {
    soma += i;
}
System.out.println("Soma dos números pares de 2 a 20: " + soma);

Exercícios de Aplicação AFF Education

Reforce o conteúdo desta aula com mais dois exercícios práticos:

1. Quantas vezes o corpo de for (int i = 0; i < 5; i++) é executado?

2. Qual a saída de int s = 0; for (int i = 1; i <= 4; i++) s += i; System.out.println(s);?