Nesta aula, você encontrará 10 desafios práticos que envolvem estruturas de controle:
if, else if, else? :switch-casefor, while, do-whilebreak, continueDica: Tente resolver cada desafio antes de ver a solução. Pratique diferentes abordagens!
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
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
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!
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
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
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!
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!
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
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 ===
*
***
*****
*******
*********
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
Reforce o conteúdo desta aula com mais dois exercícios práticos: