WHILE e DO-WHILE em Java
Guia completo para dominar loops condicionais e validações dinâmicas
1. O Básico: Entendendo os Loops Condicionais
Enquanto o laço for é ideal quando sabemos exatamente quantas vezes queremos repetir algo, os laços while e do-while são perfeitos para situações onde a repetição depende de uma condição que pode mudar.
Imagine pedindo uma senha ao usuário. Você não sabe quantas tentativas ele precisará até acertar. Você quer continuar pedindo "enquanto" a senha estiver errada.
2. WHILE: O Loop com Verificação Prévia
2.1 O que é while?
O while (enquanto) continua executando enquanto uma condição for verdadeira. A condição é verificada ANTES de cada execução.
while (condição) {
// Código executado enquanto a condição for verdadeira
// É importante modificar algo que afete a condição
}
Como o WHILE funciona:
- Passo 1: Verifica se a condição é verdadeira
- Passo 2: Se SIM, executa o bloco de código
- Passo 3: Volta ao Passo 1
- Passo 4: Se NÃO, pula o bloco e continua
Importante: Se a condição for falsa desde o início, o bloco nunca será executado!
2.2 Quando usar WHILE?
- Validação de entrada do usuário (senha, email, etc.)
- Leitura de dados até encontrar um marcador específico
- Processamento até uma condição de parada ser atingida
- Quando o número de repetições é desconhecido
- Menus de aplicação que repetem até o usuário sair
3. DO-WHILE: O Loop com Verificação Posterior
3.1 O que é do-while?
O do-while é semelhante ao while, mas o bloco é executado PELO MENOS UMA VEZ, pois a condição é verificada no final.
do {
// Código executado PELO MENOS UMA VEZ
// Depois continua enquanto a condição for verdadeira
} while (condição);
Como o DO-WHILE funciona:
- Passo 1: Executa o bloco (SEM verificar nada antes)
- Passo 2: Verifica se a condição é verdadeira
- Passo 3: Se SIM, volta ao Passo 1
- Passo 4: Se NÃO, termina o loop
Importante: O bloco SEMPRE executa pelo menos uma vez!
3.2 Quando usar DO-WHILE?
- Menus interativos (sempre mostrar o menu pelo menos uma vez)
- Validações onde você precisa pedir o dado primeiro
- Jogos que precisam rodar pelo menos uma rodada
- Quando você quer garantir que algo aconteça antes de verificar a condição
4. WHILE vs DO-WHILE: Comparação
| Aspecto | WHILE | DO-WHILE |
|---|---|---|
| Verificação | Antes de executar | Depois de executar |
| Mínimo de execuções | 0 vezes (pode nunca executar) | 1 vez (sempre executa) |
| Uso típico | Quando pode não precisar executar | Quando precisa executar pelo menos uma vez |
| Sintaxe | while (condição) { } | do { } while (condição); |
Quando usar cada um?
- WHILE: "Enquanto a senha estiver errada, peça novamente"
- DO-WHILE: "Mostre o menu, depois pergunte se quer continuar"
5. Exemplos Práticos com WHILE
Exemplo 1: Contagem Simples
public class ContagemWhile {
public static void main(String[] args) {
int contador = 1;
while (contador <= 5) {
System.out.println("Contagem: " + contador);
contador++; // IMPORTANTE: atualizar
}
System.out.println("Fim!");
}
}
Exemplo 2: Validação de Senha
import java.util.Scanner;
public class ValidacaoSenha {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String senhaCorreta = "java123";
String senhaDigitada = "";
while (!senhaDigitada.equals(senhaCorreta)) {
System.out.print("Digite a senha: ");
senhaDigitada = sc.nextLine();
if (!senhaDigitada.equals(senhaCorreta)) {
System.out.println("Senha incorreta! Tente novamente.\n");
}
}
System.out.println("Acesso liberado!");
sc.close();
}
}
Exemplo 3: Soma até Zero
import java.util.Scanner;
public class SomaNumeros {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numero = -1;
int soma = 0;
System.out.println("Digite números para somar (0 para parar):");
while (numero != 0) {
System.out.print("Número: ");
numero = sc.nextInt();
soma += numero;
}
System.out.println("Soma total: " + soma);
sc.close();
}
}
Exemplo 4: Menu com WHILE
import java.util.Scanner;
public class MenuWhile {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int opcao = 0;
while (opcao != 4) {
System.out.println("\n=== MENU ===");
System.out.println("1. Cadastrar");
System.out.println("2. Listar");
System.out.println("3. Excluir");
System.out.println("4. Sair");
System.out.print("Escolha: ");
opcao = sc.nextInt();
if (opcao == 1) {
System.out.println("Cadastrando...");
} else if (opcao == 4) {
System.out.println("Saindo...");
}
}
sc.close();
}
}
6. Exemplos Práticos com DO-WHILE
Exemplo 1: Menu Garantido
import java.util.Scanner;
public class MenuDoWhile {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int opcao;
do {
System.out.println("\n=== CALCULADORA ===");
System.out.println("1. Somar");
System.out.println("2. Subtrair");
System.out.println("3. Multiplicar");
System.out.println("0. Sair");
System.out.print("Escolha: ");
opcao = sc.nextInt();
if (opcao >= 1 && opcao <= 3) {
System.out.println("Executando operação " + opcao);
}
} while (opcao != 0);
System.out.println("Até logo!");
sc.close();
}
}
Exemplo 2: Validação de Idade
import java.util.Scanner;
public class ValidacaoIdade {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int idade;
do {
System.out.print("Digite sua idade (0-120): ");
idade = sc.nextInt();
if (idade < 0 || idade > 120) {
System.out.println("Idade inválida! Tente novamente.\n");
}
} while (idade < 0 || idade > 120);
System.out.println("Idade válida: " + idade + " anos");
sc.close();
}
}
Exemplo 3: Jogo de Adivinhação
import java.util.Scanner;
import java.util.Random;
public class JogoAdivinhacao {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random random = new Random();
int numeroSecreto = random.nextInt(100) + 1;
int palpite;
int tentativas = 0;
System.out.println("=== JOGO DA ADIVINHAÇÃO ===");
do {
System.out.print("Seu palpite: ");
palpite = sc.nextInt();
tentativas++;
if (palpite < numeroSecreto) {
System.out.println("Muito baixo!");
} else if (palpite > numeroSecreto) {
System.out.println("Muito alto!");
} else {
System.out.println("PARABÉNS! " + tentativas + " tentativas!");
}
} while (palpite != numeroSecreto);
sc.close();
}
}
7. Comparação: FOR vs WHILE vs DO-WHILE
| Aspecto | FOR | WHILE | DO-WHILE |
|---|---|---|---|
| Melhor para | Repetições fixas | Condições dinâmicas | Executar pelo menos uma vez |
| Verificação | Início de cada iteração | Antes de executar | Depois de executar |
| Mínimo execuções | 0 vezes | 0 vezes | 1 vez |
Quando usar cada um?
- FOR: "Preciso fazer isso 10 vezes" ou "Para cada item da lista"
- WHILE: "Enquanto a senha estiver errada, peça novamente"
- DO-WHILE: "Mostre o menu, depois pergunte se quer continuar"
8. Erros Comuns e Boas Práticas
Erro 1: Loop Infinito no WHILE
// ERRADO! Condição nunca muda
int contador = 0;
while (contador < 10) {
System.out.println("Loop infinito!");
}
// CORRETO:
int contador = 0;
while (contador < 10) {
System.out.println("Contagem: " + contador);
contador++; // SEMPRE atualize
}
Erro 2: Ponto e Vírgula no DO-WHILE
// ERRADO! Falta ponto e vírgula
do {
System.out.println("Teste");
} while (true) // ERRO!
// CORRETO:
do {
System.out.println("Teste");
} while (false); // Note o ponto e vírgula!
Boas Práticas:
- Sempre garanta que a condição pode se tornar falsa
- Inicialize variáveis de controle antes do loop
- No DO-WHILE, não esqueça o ponto e vírgula
- Use nomes descritivos para condições
- Evite loops infinitos - sempre atualize as variáveis
- Use WHILE quando pode não precisar executar, DO-WHILE quando precisa
9. Resumo Visual
WHILE:
while (condição) { código }
• Verifica a condição ANTES de executar
• Pode nunca executar (se condição falsa desde início)
• Ideal para validações e condições incertas
DO-WHILE:
do { código } while (condição);
• Executa ANTES de verificar a condição
• Sempre executa pelo menos UMA vez
• Ideal para menus e ações que precisam acontecer primeiro
Uso no Mundo Real:
• WHILE: Validar login, processar arquivos até o fim
• DO-WHILE: Menus interativos, jogos, confirmações
Conclusão
Dominar WHILE e DO-WHILE é essencial para criar programas dinâmicos e interativos. Eles complementam o FOR perfeitamente, dando flexibilidade para situações onde o número de repetições é desconhecido.
Lembre-se: Use WHILE quando pode não precisar executar, e DO-WHILE quando precisa executar pelo menos uma vez!