5 Estruturas de Repetição
5.1 Ideia principal
Repetição permite executar um bloco várias vezes.
Chatbot precisa disso para continuar conversando até a pessoa digitar sair.
5.2 Exemplo com while
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String msg = "";
while (!msg.equalsIgnoreCase("sair")) {
System.out.print("Você: ");
msg = sc.nextLine();
System.out.println("Bot: você disse -> " + msg);
}
System.out.println("Bot: Encerrando conversa.");
sc.close();
}
}5.3 Exemplo com for
for (int i = 1; i <= 3; i++) {
System.out.println("Bot: mensagem número " + i);
}5.4 Como escolher entre while, do-while e for
Em Java, a escolha da estrutura de repetição depende do problema e da informação que você já possui antes de iniciar o loop.
Use while quando a quantidade de repetições ainda não é conhecida, como em um chatbot que continua ativo até receber uma palavra de saída.
Use do-while quando o bloco precisa executar ao menos uma vez, mesmo que a condição de continuidade seja falsa logo no início.
Use for quando você já conhece o intervalo de repetição, por exemplo para percorrer índices, gerar tentativas limitadas ou produzir relatórios com número fixo de linhas.
5.5 Exemplo com do-while
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String opcao;
do {
System.out.println("Menu:");
System.out.println("1 - Iniciar conversa");
System.out.println("2 - Ver ajuda");
System.out.println("0 - Sair");
System.out.print("Escolha: ");
opcao = sc.nextLine();
System.out.println("Você escolheu: " + opcao);
} while (!opcao.equals("0"));
System.out.println("Encerrado.");
sc.close();
}
}5.6 Contadores e acumuladores
Dois padrões aparecem com frequência em laços: contador e acumulador.
Contador registra quantas vezes algo aconteceu, como quantidade de mensagens, tentativas de login ou número de respostas válidas.
Acumulador guarda uma soma ou valor agregado, como total de pontos, soma de notas ou tempo total de atendimento.
int contadorMensagens = 0;
int somaCaracteres = 0;
while (!msg.equalsIgnoreCase("sair")) {
System.out.print("Você: ");
msg = sc.nextLine();
if (!msg.equalsIgnoreCase("sair")) {
contadorMensagens++;
somaCaracteres += msg.length();
}
}
System.out.println("Mensagens válidas: " + contadorMensagens);
System.out.println("Total de caracteres: " + somaCaracteres);5.7 Controle de fluxo no loop
Em alguns cenários você precisa pular uma iteração inválida ou encerrar o loop imediatamente.
continue interrompe apenas a iteração atual e passa para a próxima.
break encerra o laço inteiro naquele ponto.
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // ignora pares
}
if (i > 7) {
break; // para ao passar de 7
}
System.out.println(i);
}5.8 Boas práticas para repetição
Escreva condições de parada claras e fáceis de ler.
Evite loops infinitos acidentais, garantindo que alguma variável de controle seja atualizada dentro do bloco.
Prefira nomes descritivos para variáveis de controle, como tentativaAtual, totalMensagens e limiteTentativas.
Teste casos de borda: entrada vazia, palavra de saída em maiúsculas, contador iniciando em zero e limites mínimo/máximo do laço.
5.9 Erros comuns de iniciantes
Um erro frequente é esquecer de atualizar a variável usada na condição do while, o que prende o programa em execução contínua.
Outro erro comum é usar == para comparar String; em Java, a comparação de conteúdo textual deve usar equals ou equalsIgnoreCase.
Também é importante revisar limites em for, pois trocar < por <= no momento errado pode gerar iterações a mais e efeitos inesperados.
- Pare o loop ao digitar
fim. - Conte quantas mensagens foram enviadas.
- Mostre
obrigadoao encerrar. - Reescreva o exemplo do chatbot usando
do-while. - Adicione um limite máximo de 5 mensagens antes de encerrar automaticamente.
- Ignore entradas vazias com
continuee contabilize apenas mensagens não vazias.
Neste capitulo, o estudo de estruturas de repeticao se torna realmente valioso quando voce deixa de enxergar o conteudo como uma lista de regras isoladas e passa a observar como cada decisao tecnica influencia a qualidade do programa, a facilidade de manutencao e a capacidade de adaptar a solucao sem quebrar o que ja estava funcionando, especialmente em atividades progressivas que simulam situacoes de projeto real.
Para consolidar o aprendizado com profundidade, vale estruturar sua pratica em uma sequencia objetiva na qual voce revisa o conceito principal, implementa um exemplo pequeno e legivel e, logo em seguida, analisa de maneira critica se houve melhoria concreta em iteracao orientada a objetivo, acumuladores e contadores e eficiencia, porque esse ciclo consciente transforma estudo passivo em desenvolvimento de criterio tecnico.
Quando esse processo se repete ao longo das semanas, voce comeca a perceber que sua evolucao nao depende de decorar respostas prontas, mas sim de interpretar problemas com mais maturidade, justificar escolhas com argumentos claros e construir solucoes cada vez mais consistentes, o que representa exatamente a transicao de iniciante para praticante autonomo dentro da trilha de Java.