5 Estruturas de repetição
Manter a conversa ativa com critérios de parada claros
5.1 Objetivos de aprendizagem
Ao concluir este capítulo, você deverá ser capaz de:
- escolher entre
while,do-whileefor; - definir uma condição de parada;
- usar contadores e acumuladores;
- empregar
breakecontinuesem esconder o fluxo.
5.2 Escolhendo o laço
Use:
whilequando a quantidade de repetições é desconhecida;do-whilequando o bloco precisa executar ao menos uma vez;forquando existe um intervalo ou contador bem definido;for-eachpara percorrer todos os elementos de uma estrutura.
5.3 Chatbot em repetição
import java.util.Scanner;
public class Capitulo04Repeticao {
public static void main(String[] args) {
int totalMensagens = 0;
try (Scanner scanner = new Scanner(System.in)) {
while (true) {
System.out.print("Você: ");
String mensagem = scanner.nextLine().strip();
if (mensagem.equalsIgnoreCase("sair")) {
break;
}
if (mensagem.isBlank()) {
System.out.println("Bot: Digite uma mensagem.");
continue;
}
totalMensagens++;
System.out.println("Bot: Recebi -> " + mensagem);
}
}
System.out.println("Mensagens registradas: " + totalMensagens);
}
}A condição de parada está explícita: o comando sair executa break. Entradas em branco usam continue e não são contabilizadas.
5.4 Contadores e acumuladores
Um contador registra quantas vezes algo aconteceu. Um acumulador agrega valores, como o total de caracteres:
Antes de escrever um laço, responda:
- qual estado muda em cada iteração?
- quando a repetição termina?
- o caso vazio foi previsto?
- existe risco de acessar uma posição inválida?
5.5 Laços aninhados
Laços aninhados são úteis para tabelas e matrizes, mas multiplicam o número de iterações. Para dois laços que percorrem n elementos, o trabalho pode crescer aproximadamente como \(n^2\). Primeiro escreva uma solução correta; depois avalie se o volume de dados exige outra estrutura.
5.6 Evolução do projeto: versão 4
O chatbot permanece ativo até receber sair, rejeita mensagens vazias e mostra quantas mensagens válidas foram recebidas.
O exemplo completo está em examples/src/Capitulo04Repeticao.java.
5.7 Prática verificável
Acrescente:
- limite opcional de cinco mensagens;
- contador de comandos desconhecidos;
- total de caracteres digitados, sem contar
sair.
Casos de teste:
| Sequência | Resultado esperado |
|---|---|
oi, sair |
uma mensagem registrada |
linha vazia, sair |
zero mensagens |
| cinco mensagens | encerramento pelo limite |
SAIR |
encerramento normal |
Um while em que nenhuma variável altera a condição pode produzir repetição infinita. Verifique a condição de parada antes de executar.