JAVA Learning

Hub de Conteúdo

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.

Sintaxe do while:
java
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.

Sintaxe do do-while:
java
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

java
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

java
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

java
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

java
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

java
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

java
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

java
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

java
// 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

java
// 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!