AFF Education Construa seu Futuro

Aula 36 - Estruturas de Controle (anatomia)

O que são Estruturas de Controle?

Estruturas de controle são mecanismos de programação que alteram o fluxo de execução de um programa com base em decisões, repetições ou desvios condicionais, permitindo executar blocos de código de forma seletiva ou repetitiva conforme condições específicas.

Tipos de estruturas de controle em Java:

  1. Estruturas de Decisão (if, if-else, switch)
  2. Estruturas de Repetição (while, do-while, for)
  3. Estruturas de Controle de Fluxo (break, continue, return)

Anatomia das Estruturas de Controle

As estruturas de controle em Java seguem padrões específicos de sintaxe. Vamos entender a estrutura básica de cada uma:

// 1) Estrutura if
if (expressão) {
    // bloco de código executado se a expressão for verdadeira
}

// 2) Estrutura while
while (expressão) {
    // bloco de código repetido enquanto a expressão for verdadeira
}

// 3) Estrutura for
for (inicialização; condição; atualização) {
    // bloco de código repetido enquanto a condição for verdadeira
}

// 4) Estrutura do-while
do {
    // bloco de código executado pelo menos uma vez e repetido enquanto a expressão for verdadeira
} while (expressão);

Nota: As chaves { } são obrigatórias quando o bloco contém mais de uma instrução. Para blocos com apenas uma instrução, as chaves são opcionais, mas recomendadas para melhor legibilidade e para evitar erros.

Estrutura de Decisão if

Condição
↓
Bloco de código executado se a condição for verdadeira

A estrutura if permite que um bloco de código seja executado apenas se uma condição for verdadeira.

public class EstruturaIf {
    public static void main(String[] args) {
        int idade = 18;
        
        // Estrutura if simples
        if (idade >= 18) {
            System.out.println("Pessoa maior de idade.");
        }
        
        // if com uma única instrução (sem chaves)
        if (idade == 18)
            System.out.println("Pessoa tem exatamente 18 anos.");
        
        System.out.println("Fim do programa.");
    }
}

Pessoa maior de idade.

Pessoa tem exatamente 18 anos.

Fim do programa.

Estrutura de Decisão if-else

Condição
↙️ verdadeiro       falso ↘️
Bloco if
Bloco else

A estrutura if-else permite escolher entre dois blocos de código: um executado se a condição for verdadeira e outro se for falsa.

public class EstruturaIfElse {
    public static void main(String[] args) {
        int idade = 16;
        
        // Estrutura if-else
        if (idade >= 18) {
            System.out.println("Pessoa maior de idade.");
        } else {
            System.out.println("Pessoa menor de idade.");
        }
        
        // Verificando se um número é par ou ímpar
        int numero = 7;
        
        if (numero % 2 == 0) {
            System.out.println(numero + " é par.");
        } else {
            System.out.println(numero + " é ímpar.");
        }
    }
}

Pessoa menor de idade.

7 é ímpar.

Estrutura de Decisão if-else-if

A estrutura if-else-if permite testar múltiplas condições em sequência.

public class EstruturaIfElseIf {
    public static void main(String[] args) {
        int nota = 85;
        
        // Estrutura if-else-if para classificar a nota
        if (nota >= 90) {
            System.out.println("Conceito A");
        } else if (nota >= 80) {
            System.out.println("Conceito B");
        } else if (nota >= 70) {
            System.out.println("Conceito C");
        } else if (nota >= 60) {
            System.out.println("Conceito D");
        } else {
            System.out.println("Conceito F (Reprovado)");
        }
        
        // Outro exemplo com faixas etárias
        int idade = 25;
        
        if (idade < 12) {
            System.out.println("Criança");
        } else if (idade < 18) {
            System.out.println("Adolescente");
        } else if (idade < 60) {
            System.out.println("Adulto");
        } else {
            System.out.println("Idoso");
        }
    }
}

Conceito B

Adulto

Dica: Na estrutura if-else-if, apenas o bloco correspondente à primeira condição verdadeira será executado. Se nenhuma condição for verdadeira, o bloco else (se existir) será executado.

Estrutura de Repetição while

Condição
↓ verdadeiro
Bloco de código
↑ ← ← ← ←

A estrutura while repete um bloco de código enquanto uma condição especificada for verdadeira. A condição é verificada antes da execução do bloco.

public class EstruturaWhile {
    public static void main(String[] args) {
        // Contagem de 1 a 5 usando while
        int contador = 1;
        
        while (contador <= 5) {
            System.out.println("Contagem: " + contador);
            contador++; // Incrementa o contador para evitar loop infinito
        }
        
        System.out.println("Contagem finalizada!");
        
        // Exemplo: somar os números de 1 a 10
        int i = 1;
        int soma = 0;
        
        while (i <= 10) {
            soma += i; // Adiciona o valor atual de i à soma
            i++; // Incrementa i
        }
        
        System.out.println("A soma dos números de 1 a 10 é: " + soma);
    }
}

Contagem: 1

Contagem: 2

Contagem: 3

Contagem: 4

Contagem: 5

Contagem finalizada!

A soma dos números de 1 a 10 é: 55

Atenção: Ao usar a estrutura while, certifique-se de que a condição se torne falsa em algum momento. Caso contrário, ocorrerá um loop infinito, e o programa nunca terminará de executar.

Estrutura de Repetição do-while

Bloco de código
↓
Condição
↑ ← ← ← ← verdadeiro

A estrutura do-while é similar ao while, mas a condição é verificada após a execução do bloco. Isso garante que o bloco seja executado pelo menos uma vez, mesmo que a condição seja inicialmente falsa.

public class EstruturaDoWhile {
    public static void main(String[] args) {
        // Contagem regressiva de 5 a 1 usando do-while
        int contador = 5;
        
        do {
            System.out.println("Contagem regressiva: " + contador);
            contador--;
        } while (contador > 0);
        
        System.out.println("Lançamento!");
        
        // Exemplo que demonstra a execução garantida pelo menos uma vez
        int x = 10;
        
        do {
            System.out.println("Este bloco será executado pelo menos uma vez, mesmo que a condição seja falsa.");
        } while (x < 10); // Esta condição já é falsa, mas o bloco foi executado uma vez
    }
}

Contagem regressiva: 5

Contagem regressiva: 4

Contagem regressiva: 3

Contagem regressiva: 2

Contagem regressiva: 1

Lançamento!

Este bloco será executado pelo menos uma vez, mesmo que a condição seja falsa.

Estrutura de Repetição for

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

A estrutura for fornece uma forma compacta de escrever loops com contador. Ela combina a inicialização, a condição de teste e a atualização em uma única linha.

            public class estruturaFor {
                public static void main(String[] args) {
                    
                    System.out.println("Contagem de 1 a 5:");
                    for (int i = 1; i <= 5; i++) {
                        System.out.print(i);
                        if (i < 5) System.out.print(", ");
                    }
                    System.out.println();
                    
                    int somaPares = 0;
                    for (int i = 0; i <= 10; i += 2) {
                        somaPares += i;
                    }
                    System.out.println("Soma dos números pares de 0 a 10: " + somaPares);
                    
                    System.out.println("Contagem regressiva de 10 a 1:");
                    for (int i = 10; i >= 1; i--) {
                        System.out.print(i);
                        if (i > 1) System.out.print(", ");
                    }
                    
                    System.out.println("\nLoop for de 2 variáveis i e j:");
                    for (int i = 1, j = 10; i <= 5; i++, j--) {
                        System.out.println("i = " + i + ", j = " + j);
                    }
                }
            }
    

Contagem de 1 a 5:

1, 2, 3, 4, 5

Soma dos números pares de 0 a 10: 30

Contagem regressiva de 10 a 1:

10, 9, 8, 7, 6, 5, 4, 3, 2, 1

Loop for de 2 variáveis i e j:

i = 1, j = 10

i = 2, j = 9

i = 3, j = 8

i = 4, j = 7

i = 5, j = 6

Comparação entre as Estruturas de Repetição

Estrutura Quando usar Características
for Quando o número de repetições é conhecido ou você precisa de um contador
  • Sintaxe compacta
  • Ideal para iterações com contador
  • Variável de controle geralmente tem escopo limitado ao loop
while Quando o número de repetições é desconhecido e depende de uma condição
  • Verifica a condição antes de executar o bloco
  • O bloco pode nunca ser executado se a condição for falsa inicialmente
do-while Quando você precisa executar o bloco pelo menos uma vez
  • Verifica a condição após executar o bloco
  • Garante que o bloco seja executado pelo menos uma vez

Exercícios

Teste seus conhecimentos sobre estruturas de controle em Java:

1. Qual é a estrutura de controle que executa um bloco de código pelo menos uma vez, independentemente da condição?

2. Qual das seguintes estruturas é mais adequada quando o número de repetições é conhecido previamente?

3. O que acontece se a condição de um loop while for falsa desde o início?

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

int x = 0;
while (x < 5) {
    System.out.print(x + " ");
    x++;
}

5. Complete o código para somar os números de 1 a 10 usando um loop for:

int soma = 0;
for (____________________) {
    soma += i;
}
System.out.println(soma); // Deve imprimir 55

Exercícios de Aplicação AFF Education

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

1. Em uma estrutura if (condicao) { ... }, o que deve haver dentro dos parênteses?

2. O bloco de código de um if é delimitado por: