AFF Education Construa seu Futuro

Desafios - Estruturas de Controle

Instruções Gerais

Nesta aula, você encontrará 10 desafios práticos que envolvem estruturas de controle:

Dica: Tente resolver cada desafio antes de ver a solução. Pratique diferentes abordagens!

📝 Desafio 1: Calculadora de IMC

Descrição: Crie um programa que calcule o IMC (peso / altura²) e classifique usando if-else: Abaixo do peso (<18.5), Peso normal (18.5-24.9), Sobrepeso (25-29.9), Obesidade (≥30).

Conceitos: Scanner, if-else, cálculos

Dificuldade: ⭐ Fácil

import java.util.Scanner;

public class Desafio1 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        System.out.println("=== CALCULADORA DE IMC ===");
        
        System.out.print("Digite seu peso (kg): ");
        double peso = entrada.nextDouble();
        
        System.out.print("Digite sua altura (m): ");
        double altura = entrada.nextDouble();
        
        // Calculando IMC
        double imc = peso / (altura * altura);
        
        System.out.printf("\nSeu IMC: %.2f\n", imc);
        
        // Classificação com if-else
        System.out.print("Classificação: ");
        
        if (imc < 18.5) {
            System.out.println("Abaixo do peso");
        } else if (imc < 25) {
            System.out.println("Peso normal");
        } else if (imc < 30) {
            System.out.println("Sobrepeso");
        } else {
            System.out.println("Obesidade");
        }
        
        entrada.close();
    }
}

=== CALCULADORA DE IMC ===

Digite seu peso (kg): 70

Digite sua altura (m): 1.75

Seu IMC: 22.86

Classificação: Peso normal

📝 Desafio 2: Tabuada com For

Descrição: Crie um programa que peça um número e exiba sua tabuada de 1 a 10 usando loop for.

Conceitos: for, Scanner

Dificuldade: ⭐ Fácil

import java.util.Scanner;

public class Desafio2 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        System.out.print("Digite um número: ");
        int numero = entrada.nextInt();
        
        System.out.println("\n=== TABUADA DO " + numero + " ===");
        
        for (int i = 1; i <= 10; i++) {
            int resultado = numero * i;
            System.out.println(numero + " x " + i + " = " + resultado);
        }
        
        entrada.close();
    }
}

Digite um número: 7

=== 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

📝 Desafio 3: Número Primo

Descrição: Crie um programa que verifique se um número é primo (divisível apenas por 1 e ele mesmo). Use for e if.

Conceitos: for, if, break

Dificuldade: ⭐⭐ Médio

import java.util.Scanner;

public class Desafio3 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        System.out.print("Digite um número: ");
        int numero = entrada.nextInt();
        
        // Verificando se é primo
        boolean ehPrimo = true;
        
        if (numero <= 1) {
            ehPrimo = false;
        } else {
            for (int i = 2; i <= numero / 2; i++) {
                if (numero % i == 0) {
                    ehPrimo = false;
                    break;
                }
            }
        }
        
        // Exibindo resultado
        if (ehPrimo) {
            System.out.println("\n✓ " + numero + " É PRIMO!");
        } else {
            System.out.println("\n✗ " + numero + " NÃO É PRIMO!");
        }
        
        entrada.close();
    }
}

Digite um número: 17

✓ 17 É PRIMO!

📝 Desafio 4: Contador de Pares e Ímpares

Descrição: Peça ao usuário 10 números. Conte e exiba quantos são pares e quantos são ímpares usando for e if.

Conceitos: for, if-else, contadores

Dificuldade: ⭐ Fácil

import java.util.Scanner;

public class Desafio4 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        int pares = 0;
        int impares = 0;
        
        System.out.println("Digite 10 números:");
        
        for (int i = 1; i <= 10; i++) {
            System.out.print("Número " + i + ": ");
            int numero = entrada.nextInt();
            
            if (numero % 2 == 0) {
                pares++;
            } else {
                impares++;
            }
        }
        
        System.out.println("\n=== RESULTADO ===");
        System.out.println("Números pares: " + pares);
        System.out.println("Números ímpares: " + impares);
        
        entrada.close();
    }
}

Digite 10 números:

Número 1: 12

Número 2: 7

Número 3: 20

Número 4: 15

Número 5: 8

Número 6: 33

Número 7: 40

Número 8: 9

Número 9: 16

Número 10: 25

=== RESULTADO ===

Números pares: 5

Números ímpares: 5

📝 Desafio 5: Menu com Switch-Case

Descrição: Crie uma calculadora simples usando switch-case. Menu: 1-Somar, 2-Subtrair, 3-Multiplicar, 4-Dividir, 5-Sair.

Conceitos: switch-case, while, Scanner

Dificuldade: ⭐⭐ Médio

import java.util.Scanner;

public class Desafio5 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        while (true) {
            System.out.println("\n=== CALCULADORA ===");
            System.out.println("1. Somar");
            System.out.println("2. Subtrair");
            System.out.println("3. Multiplicar");
            System.out.println("4. Dividir");
            System.out.println("5. Sair");
            System.out.print("Escolha: ");
            
            int opcao = entrada.nextInt();
            
            if (opcao == 5) {
                System.out.println("Até logo!");
                break;
            }
            
            System.out.print("Primeiro número: ");
            double num1 = entrada.nextDouble();
            
            System.out.print("Segundo número: ");
            double num2 = entrada.nextDouble();
            
            double resultado = 0;
            
            switch (opcao) {
                case 1:
                    resultado = num1 + num2;
                    System.out.println("Resultado: " + resultado);
                    break;
                    
                case 2:
                    resultado = num1 - num2;
                    System.out.println("Resultado: " + resultado);
                    break;
                    
                case 3:
                    resultado = num1 * num2;
                    System.out.println("Resultado: " + resultado);
                    break;
                    
                case 4:
                    if (num2 != 0) {
                        resultado = num1 / num2;
                        System.out.println("Resultado: " + resultado);
                    } else {
                        System.out.println("Erro: Divisão por zero!");
                    }
                    break;
                    
                default:
                    System.out.println("Opção inválida!");
            }
        }
        
        entrada.close();
    }
}

=== CALCULADORA ===

1. Somar

2. Subtrair

3. Multiplicar

4. Dividir

5. Sair

Escolha: 1

Primeiro número: 15

Segundo número: 25

Resultado: 40.0

📝 Desafio 6: Jogo de Adivinhação

Descrição: Crie um jogo onde o computador escolhe um número de 1 a 100 e o usuário tenta adivinhar. Dê dicas "maior" ou "menor" usando while e if.

Conceitos: while, if-else, Random

Dificuldade: ⭐⭐ Médio

import java.util.Random;
import java.util.Scanner;

public class Desafio6 {
    public static void main(String[] args) {
        Random random = new Random();
        Scanner entrada = new Scanner(System.in);
        
        int numeroSecreto = random.nextInt(100) + 1;
        int tentativas = 0;
        boolean acertou = false;
        
        System.out.println("=== JOGO DE ADIVINHAÇÃO ===");
        System.out.println("Adivinhe o número de 1 a 100!");
        
        while (!acertou) {
            System.out.print("\nSua tentativa: ");
            int palpite = entrada.nextInt();
            tentativas++;
            
            if (palpite == numeroSecreto) {
                acertou = true;
                System.out.println("\n🎉 PARABÉNS! Você acertou!");
                System.out.println("Número de tentativas: " + tentativas);
                
            } else if (palpite < numeroSecreto) {
                System.out.println("↑ Tente um número MAIOR!");
                
            } else {
                System.out.println("↓ Tente um número MENOR!");
            }
        }
        
        // Classificação do desempenho
        if (tentativas <= 5) {
            System.out.println("Desempenho: EXCELENTE!");
        } else if (tentativas <= 10) {
            System.out.println("Desempenho: BOM!");
        } else {
            System.out.println("Desempenho: Pode melhorar!");
        }
        
        entrada.close();
    }
}

=== JOGO DE ADIVINHAÇÃO ===

Adivinhe o número de 1 a 100!

Sua tentativa: 50

↑ Tente um número MAIOR!

Sua tentativa: 75

↓ Tente um número MENOR!

Sua tentativa: 63

🎉 PARABÉNS! Você acertou!

Número de tentativas: 3

Desempenho: EXCELENTE!

📝 Desafio 7: Validação de Senha

Descrição: Crie um sistema que pede uma senha até o usuário acertar (máximo 3 tentativas). Use do-while e contador.

Conceitos: do-while, if-else, String.equals()

Dificuldade: ⭐⭐ Médio

import java.util.Scanner;

public class Desafio7 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        String senhaCorreta = "java2025";
        int tentativas = 0;
        int maxTentativas = 3;
        boolean acertou = false;
        
        System.out.println("=== SISTEMA DE LOGIN ===");
        
        do {
            System.out.print("\nDigite a senha: ");
            String senha = entrada.nextLine();
            tentativas++;
            
            if (senha.equals(senhaCorreta)) {
                acertou = true;
                System.out.println("\n✓ ACESSO LIBERADO!");
                System.out.println("Bem-vindo ao sistema!");
                
            } else {
                int tentativasRestantes = maxTentativas - tentativas;
                
                if (tentativasRestantes > 0) {
                    System.out.println("✗ Senha incorreta!");
                    System.out.println("Tentativas restantes: " + tentativasRestantes);
                } else {
                    System.out.println("\n✗ ACESSO BLOQUEADO!");
                    System.out.println("Você excedeu o número de tentativas.");
                }
            }
            
        } while (!acertou && tentativas < maxTentativas);
        
        entrada.close();
    }
}

=== SISTEMA DE LOGIN ===

Digite a senha: 123456

✗ Senha incorreta!

Tentativas restantes: 2

Digite a senha: java2025

✓ ACESSO LIBERADO!

Bem-vindo ao sistema!

📝 Desafio 8: Fatorial com While

Descrição: Calcule o fatorial de um número usando while. Exemplo: 5! = 5 × 4 × 3 × 2 × 1 = 120

Conceitos: while, multiplicação acumulada

Dificuldade: ⭐⭐ Médio

import java.util.Scanner;

public class Desafio8 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        System.out.print("Digite um número: ");
        int numero = entrada.nextInt();
        
        if (numero < 0) {
            System.out.println("Fatorial não existe para números negativos!");
        } else {
            int fatorial = 1;
            int i = numero;
            
            System.out.print("\n" + numero + "! = ");
            
            // Calculando fatorial com while
            while (i > 0) {
                fatorial *= i;
                System.out.print(i);
                
                if (i > 1) {
                    System.out.print(" × ");
                }
                
                i--;
            }
            
            System.out.println(" = " + fatorial);
        }
        
        entrada.close();
    }
}

Digite um número: 6

6! = 6 × 5 × 4 × 3 × 2 × 1 = 720

📝 Desafio 9: Pirâmide de Asteriscos

Descrição: Crie um programa que desenhe uma pirâmide de asteriscos com N linhas usando loops aninhados.

Conceitos: for aninhado, String.repeat()

Dificuldade: ⭐⭐⭐ Difícil

import java.util.Scanner;

public class Desafio9 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        System.out.print("Digite o número de linhas: ");
        int linhas = entrada.nextInt();
        
        System.out.println("\n=== PIRÂMIDE ===\n");
        
        for (int i = 1; i <= linhas; i++) {
            // Espaços antes dos asteriscos
            for (int j = 1; j <= linhas - i; j++) {
                System.out.print(" ");
            }
            
            // Asteriscos
            for (int j = 1; j <= 2 * i - 1; j++) {
                System.out.print("*");
            }
            
            System.out.println();
        }
        
        entrada.close();
    }
}

Digite o número de linhas: 5

=== PIRÂMIDE ===

*

***

*****

*******

*********

📝 Desafio 10: Sistema de Votação Completo

Descrição: Crie um sistema de votação para 3 candidatos. Use while para receber votos, switch-case para contabilizar, if-else para determinar vencedor. Opções: 1-Candidato A, 2-Candidato B, 3-Candidato C, 4-Voto nulo, 5-Voto branco, 0-Encerrar.

Conceitos: while, switch-case, if-else, contadores

Dificuldade: ⭐⭐⭐⭐ Muito Difícil

import java.util.Scanner;

public class Desafio10 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        
        int votosA = 0;
        int votosB = 0;
        int votosC = 0;
        int votosNulos = 0;
        int votosBrancos = 0;
        int totalVotos = 0;
        
        System.out.println("=== SISTEMA DE VOTAÇÃO ===");
        
        while (true) {
            System.out.println("\n--- MENU DE VOTAÇÃO ---");
            System.out.println("1. Candidato A");
            System.out.println("2. Candidato B");
            System.out.println("3. Candidato C");
            System.out.println("4. Voto Nulo");
            System.out.println("5. Voto Branco");
            System.out.println("0. Encerrar votação");
            System.out.print("Seu voto: ");
            
            int voto = entrada.nextInt();
            
            if (voto == 0) {
                break;
            }
            
            totalVotos++;
            
            switch (voto) {
                case 1:
                    votosA++;
                    System.out.println("✓ Voto computado para Candidato A");
                    break;
                    
                case 2:
                    votosB++;
                    System.out.println("✓ Voto computado para Candidato B");
                    break;
                    
                case 3:
                    votosC++;
                    System.out.println("✓ Voto computado para Candidato C");
                    break;
                    
                case 4:
                    votosNulos++;
                    System.out.println("✓ Voto NULO computado");
                    break;
                    
                case 5:
                    votosBrancos++;
                    System.out.println("✓ Voto BRANCO computado");
                    break;
                    
                default:
                    totalVotos--; // Não conta voto inválido
                    System.out.println("✗ Opção inválida!");
            }
        }
        
        // Exibindo resultados
        System.out.println("\n========================================");
        System.out.println("       RESULTADO DA VOTAÇÃO");
        System.out.println("========================================");
        
        System.out.println("\nVOTOS POR CANDIDATO:");
        System.out.println("Candidato A: " + votosA + " votos");
        System.out.println("Candidato B: " + votosB + " votos");
        System.out.println("Candidato C: " + votosC + " votos");
        
        System.out.println("\nOUTROS VOTOS:");
        System.out.println("Votos nulos: " + votosNulos);
        System.out.println("Votos brancos: " + votosBrancos);
        
        System.out.println("\nTOTAL DE VOTOS: " + totalVotos);
        
        // Determinando o vencedor
        if (totalVotos > 0) {
            System.out.println("\n========================================");
            System.out.println("           VENCEDOR");
            System.out.println("========================================");
            
            if (votosA > votosB && votosA > votosC) {
                System.out.println("🏆 CANDIDATO A VENCEU!");
                double percentual = (votosA * 100.0) / totalVotos;
                System.out.printf("Com %.2f%% dos votos\n", percentual);
                
            } else if (votosB > votosA && votosB > votosC) {
                System.out.println("🏆 CANDIDATO B VENCEU!");
                double percentual = (votosB * 100.0) / totalVotos;
                System.out.printf("Com %.2f%% dos votos\n", percentual);
                
            } else if (votosC > votosA && votosC > votosB) {
                System.out.println("🏆 CANDIDATO C VENCEU!");
                double percentual = (votosC * 100.0) / totalVotos;
                System.out.printf("Com %.2f%% dos votos\n", percentual);
                
            } else {
                System.out.println("⚖️ EMPATE! Será necessário segundo turno.");
            }
            
            // Estatísticas adicionais
            System.out.println("\n========================================");
            System.out.println("         ESTATÍSTICAS");
            System.out.println("========================================");
            
            int votosValidos = votosA + votosB + votosC;
            double percNulos = (votosNulos * 100.0) / totalVotos;
            double percBrancos = (votosBrancos * 100.0) / totalVotos;
            double percValidos = (votosValidos * 100.0) / totalVotos;
            
            System.out.printf("Votos válidos: %.2f%%\n", percValidos);
            System.out.printf("Votos nulos: %.2f%%\n", percNulos);
            System.out.printf("Votos brancos: %.2f%%\n", percBrancos);
            
        } else {
            System.out.println("\nNenhum voto foi registrado!");
        }
        
        entrada.close();
    }
}

=== SISTEMA DE VOTAÇÃO ===

--- MENU DE VOTAÇÃO ---

1. Candidato A

2. Candidato B

3. Candidato C

4. Voto Nulo

5. Voto Branco

0. Encerrar votação

Seu voto: 1

✓ Voto computado para Candidato A

--- MENU DE VOTAÇÃO ---

[... mais votos ...]

========================================

RESULTADO DA VOTAÇÃO

========================================

VOTOS POR CANDIDATO:

Candidato A: 8 votos

Candidato B: 5 votos

Candidato C: 3 votos

OUTROS VOTOS:

Votos nulos: 2

Votos brancos: 2

TOTAL DE VOTOS: 20

========================================

VENCEDOR

========================================

🏆 CANDIDATO A VENCEU!

Com 40.00% dos votos

Exercícios de Aplicação AFF Education

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

1. Para repetir uma ação enquanto o usuário não digitar 0, a estrutura mais adequada é:

2. Em um menu de opções repetido até o usuário sair, qual comando interrompe o laço ao escolher "sair"?