Estruturas de Repetição
>> Iniciando ciclos de execução...
>> Configurando iteradores...
>> Estabelecendo pontos de controle...
Visão Geral
Loops são como rotinas de hack - eles permitem executar operações repetitivas de forma eficiente e controlada.
Tipos de Loops
1. for Loop
for (inicialização; condição; incremento) {
// código a ser repetido
}
Exemplo Prático
for (int i = 0; i < 5; i++) {
System.out.println("Tentativa de acesso: " + i);
}
2. while Loop
while (condição) {
// código a ser repetido
}
Exemplo Prático
int tentativas = 0;
while (tentativas < 3) {
System.out.println("Tentando conexão...");
tentativas++;
}
3. do-while Loop
do {
// código a ser repetido
} while (condição);
Exemplo Prático
int senha;
do {
senha = gerarSenha();
} while (!validarSenha(senha));
4. for-each Loop
for (tipo elemento : coleção) {
// código a ser repetido
}
Exemplo Prático
String[] servidores = {"Alpha", "Beta", "Gamma"};
for (String servidor : servidores) {
System.out.println("Verificando servidor: " + servidor);
}
Controle de Loop
break
Interrompe a execução do loop completamente.
for (int i = 0; i < 100; i++) {
if (detectarIntruso()) {
break; // Sai do loop imediatamente
}
}
continue
Pula para a próxima iteração do loop.
for (int porta = 0; porta < 1024; porta++) {
if (!portaVulneravel(porta)) {
continue; // Verifica próxima porta
}
atacarPorta(porta);
}
Padrões de Uso
1. Loop Infinito Controlado
while (true) {
if (condicaoParada()) {
break;
}
// processamento
}
2. Loop com Múltiplas Variáveis
for (int i = 0, j = 10; i < j; i++, j--) {
System.out.printf("i: %d, j: %d%n", i, j);
}
3. Loop Aninhado
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
System.out.printf("[%d,%d] ", i, j);
}
System.out.println();
}
Boas Práticas
Use o Loop Adequado
// Para número conhecido de iterações for (int i = 0; i < tamanho; i++) { } // Para condição desconhecida while (temDados()) { } // Para arrays/collections for (Elemento e : colecao) { }Evite Loop Infinito Acidental
// Ruim - possível loop infinito while (x > 0) { // esqueceu de modificar x } // Bom while (x > 0) { x--; // processamento }Mantenha Loops Simples
// Evite for (int i = 0; i < 100; i++) { // muito código aqui } // Prefira for (int i = 0; i < 100; i++) { processarItem(i); }
Exemplos Avançados
1. Loop com Timer
long inicio = System.currentTimeMillis();
long limite = 5000; // 5 segundos
while (System.currentTimeMillis() - inicio < limite) {
// processamento limitado por tempo
}
2. Loop com Retry
int maxTentativas = 3;
int tentativa = 0;
while (tentativa < maxTentativas) {
try {
conectar();
break;
} catch (Exception e) {
tentativa++;
if (tentativa == maxTentativas) {
throw new RuntimeException("Falha na conexão");
}
}
}
3. Loop com Buffer
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < dados.length; i++) {
buffer.append(dados[i]);
if (buffer.length() >= 1000) {
processarBuffer(buffer.toString());
buffer.setLength(0);
}
}
Exercícios Práticos
Scanner de Portas
public void scanearPortas(int inicio, int fim) { for (int porta = inicio; porta <= fim; porta++) { if (portaAberta(porta)) { System.out.println("Porta " + porta + " está aberta"); } } }Processador de Dados
public void processarDados(List<String> dados) { int processados = 0; while (!dados.isEmpty()) { String dado = dados.remove(0); processar(dado); processados++; if (processados % 100 == 0) { System.out.println("Progresso: " + processados); } } }
Próximos Passos
Aprenda sobre condicionais em Conditionals
Explore expressões switch em Switch Expressions
Descubra pattern matching em Pattern Matching
26 June 2025