O do-while é uma estrutura de repetição em Java que garante que o bloco de código seja executado pelo menos uma vez, pois a condição é verificada após a execução do bloco.
Sintaxe:
do {
// bloco de código a ser executado
} while (condição);
Observação: Diferente do while, o do-while sempre executa o bloco de código pelo menos uma vez, mesmo que a condição seja falsa desde o início.
A principal diferença entre while e do-while é o momento em que a condição é verificada:
public class WhileVsDoWhile {
public static void main(String[] args) {
// Exemplo com while
System.out.println("Exemplo com while (condição falsa de início):");
int contador1 = 10;
while (contador1 < 5) {
System.out.println("Contador: " + contador1);
contador1++;
}
System.out.println("Valor final do contador: " + contador1);
// Exemplo com do-while
System.out.println("\nExemplo com do-while (condição falsa de início):");
int contador2 = 10;
do {
System.out.println("Contador: " + contador2);
contador2++;
} while (contador2 < 5);
System.out.println("Valor final do contador: " + contador2);
}
}
Exemplo com while (condição falsa de início):
Valor final do contador: 10
Exemplo com do-while (condição falsa de início):
Contador: 10
Valor final do contador: 11
Dica: No exemplo acima, a condição já é falsa desde o início (contador > 5 em ambos os casos). O while não executa nenhuma vez, enquanto o do-while executa uma vez antes de verificar a condição.
Vamos começar com um exemplo simples de contagem regressiva usando do-while:
public class ContagemRegressiva {
public static void main(String[] args) {
// Contagem regressiva de 5 a 1
int contador = 5;
System.out.println("Contagem regressiva:");
do {
System.out.print(contador + " ");
contador--;
} while (contador > 0);
System.out.println("\nLançamento!");
}
}
Contagem regressiva:
5 4 3 2 1
Lançamento!
Um dos usos mais comuns do do-while é para criar menus interativos, onde o menu é exibido pelo menos uma vez e continua sendo exibido até que o usuário escolha sair:
import java.util.Scanner;
public class MenuInterativo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int opcao;
do {
// Exibindo o menu
System.out.println("\n===== MENU =====");
System.out.println("1. Opção 1");
System.out.println("2. Opção 2");
System.out.println("3. Opção 3");
System.out.println("4. Sair");
System.out.print("Escolha uma opção: ");
// Lendo a opção do usuário
opcao = scanner.nextInt();
// Processando a opção
switch (opcao) {
case 1:
System.out.println("Você escolheu a Opção 1");
break;
case 2:
System.out.println("Você escolheu a Opção 2");
break;
case 3:
System.out.println("Você escolheu a Opção 3");
break;
case 4:
System.out.println("Saindo do programa...");
break;
default:
System.out.println("Opção inválida! Tente novamente.");
}
} while (opcao != 4); // Continua exibindo o menu até o usuário escolher sair
// Fechando o scanner
scanner.close();
System.out.println("Programa encerrado!");
}
}
===== MENU =====
1. Opção 1
2. Opção 2
3. Opção 3
4. Sair
Escolha uma opção: 1
Você escolheu a Opção 1
===== MENU =====
1. Opção 1
2. Opção 2
3. Opção 3
4. Sair
Escolha uma opção: 3
Você escolheu a Opção 3
===== MENU =====
1. Opção 1
2. Opção 2
3. Opção 3
4. Sair
Escolha uma opção: 4
Saindo do programa...
Programa encerrado!
Observação: Em aplicações reais, é comum usar o do-while para menus interativos porque queremos que o menu seja exibido pelo menos uma vez e continue sendo exibido até que o usuário escolha sair.
Outro uso comum do do-while é para validação de entrada, garantindo que o usuário forneça um valor válido:
import java.util.Scanner;
public class ValidacaoEntrada {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int numero;
// Solicitando um número positivo
System.out.println("Digite um número positivo:");
do {
System.out.print("Número: ");
numero = scanner.nextInt();
if (numero <= 0) {
System.out.println("Erro: O número deve ser positivo! Tente novamente.");
}
} while (numero <= 0);
System.out.println("Você digitou o número positivo: " + numero);
// Solicitando uma nota válida (0-10)
double nota;
System.out.println("\nDigite uma nota entre 0 e 10:");
do {
System.out.print("Nota: ");
nota = scanner.nextDouble();
if (nota < 0 || nota > 10) {
System.out.println("Erro: A nota deve estar entre 0 e 10! Tente novamente.");
}
} while (nota < 0 || nota > 10);
System.out.println("Você digitou a nota válida: " + nota);
// Fechando o scanner
scanner.close();
}
}
Digite um número positivo:
Número: -5
Erro: O número deve ser positivo! Tente novamente.
Número: 0
Erro: O número deve ser positivo! Tente novamente.
Número: 7
Você digitou o número positivo: 7
Digite uma nota entre 0 e 10:
Nota: 12
Erro: A nota deve estar entre 0 e 10! Tente novamente.
Nota: -1
Erro: A nota deve estar entre 0 e 10! Tente novamente.
Nota: 8.5
Você digitou a nota válida: 8.5
Dica: O do-while é ideal para validação de entrada porque sempre pedimos pelo menos uma vez, e continuamos pedindo até que a entrada seja válida.
Um exemplo prático de uso do do-while é um jogo de adivinhação, onde o jogador continua tentando adivinhar até acertar:
import java.util.Scanner;
import java.util.Random;
public class JogoAdivinhacao {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Random random = new Random();
// Gerando um número aleatório entre 1 e 100
int numeroSecreto = random.nextInt(100) + 1;
int palpite;
int tentativas = 0;
System.out.println("Bem-vindo ao Jogo de Adivinhação!");
System.out.println("Pensei em um número entre 1 e 100. Tente adivinhar!");
do {
System.out.print("\nSeu palpite: ");
palpite = scanner.nextInt();
tentativas++;
// Verificando o palpite
if (palpite < numeroSecreto) {
System.out.println("Muito baixo! Tente um número maior.");
} else if (palpite > numeroSecreto) {
System.out.println("Muito alto! Tente um número menor.");
} else {
System.out.println("Parabéns! Você acertou em " + tentativas + " tentativas!");
}
} while (palpite != numeroSecreto);
// Fechando o scanner
scanner.close();
}
}
Bem-vindo ao Jogo de Adivinhação!
Pensei em um número entre 1 e 100. Tente adivinhar!
Seu palpite: 50
Muito alto! Tente um número menor.
Seu palpite: 25
Muito baixo! Tente um número maior.
Seu palpite: 37
Muito alto! Tente um número menor.
Seu palpite: 31
Muito baixo! Tente um número maior.
Seu palpite: 34
Parabéns! Você acertou em 5 tentativas!
O do-while pode ser combinado com outras estruturas de controle para criar lógicas mais complexas:
import java.util.Scanner;
public class CalculadoraInterativa {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char continuar;
do {
// Solicitando os números
System.out.print("Digite o primeiro número: ");
double num1 = scanner.nextDouble();
System.out.print("Digite o segundo número: ");
double num2 = scanner.nextDouble();
// Solicitando a operação
System.out.println("\nEscolha a operação:");
System.out.println("1 - Adição");
System.out.println("2 - Subtração");
System.out.println("3 - Multiplicação");
System.out.println("4 - Divisão");
System.out.print("Operação: ");
int operacao = scanner.nextInt();
// Executando a operação escolhida
double resultado = 0;
boolean operacaoValida = true;
switch (operacao) {
case 1:
resultado = num1 + num2;
break;
case 2:
resultado = num1 - num2;
break;
case 3:
resultado = num1 * num2;
break;
case 4:
if (num2 != 0) {
resultado = num1 / num2;
} else {
System.out.println("Erro: Divisão por zero!");
operacaoValida = false;
}
break;
default:
System.out.println("Operação inválida!");
operacaoValida = false;
}
// Exibindo o resultado
if (operacaoValida) {
System.out.println("\nResultado: " + resultado);
}
// Perguntando se deseja continuar
System.out.print("\nDeseja fazer outro cálculo? (S/N): ");
continuar = scanner.next().charAt(0);
} while (continuar == 'S' || continuar == 's');
// Fechando o scanner
scanner.close();
System.out.println("\nCalculadora encerrada. Até logo!");
}
}
Digite o primeiro número: 10
Digite o segundo número: 5
Escolha a operação:
1 - Adição
2 - Subtração
3 - Multiplicação
4 - Divisão
Operação: 3
Resultado: 50.0
Deseja fazer outro cálculo? (S/N): S Digite o primeiro número: 20 Digite o segundo número: 4Escolha a operação:
1 - Adição
2 - Subtração
3 - Multiplicação
4 - Divisão
Operação: 4
Resultado: 5.0
Deseja fazer outro cálculo? (S/N): n
Calculadora encerrada. Até logo!
Atenção: Um erro comum é esquecer o ponto e vírgula no final do do-while, o que causa erro de compilação.
do {
// bloco de código
} while (condição); // Observe o ponto e vírgula aqui!
Teste seus conhecimentos sobre a estrutura do-while em Java:
Reforce o conteúdo desta aula com mais dois exercícios práticos: