Laços de Repetição: For, While e Do-While no Desenvolvimento Java
Introdução
Laços de repetição são componentes fundamentais em programação e permitem que blocos de código sejam executados repetidamente com base em condições específicas. Em Java, os principais laços são: for, while e do-while. Este post explora cada um deles com exemplos e melhores práticas para ajudar você a utilizá-los de forma eficiente.
Laços de Repetição
Os laços de repetição tornam possível executar uma tarefa várias vezes sem duplicar código. Em Java, os principais tipos de laços são:
- 
for: Ideal para iterações com um número conhecido de repetições.
 - 
while: Usado quando não se sabe exatamente quantas vezes a repetição ocorrerá.
 - 
do-while: Semelhante ao
while, mas garante que o bloco seja executado ao menos uma vez. 
Laço For
O laço for é usado quando sabemos quantas vezes o bloco deve ser repetido. Ele possui uma estrutura compacta que inclui inicialização, condição e incremento.
Sintaxe Básica
for (inicialização; condição; incremento) {
    // Código a ser executado
}
Exemplo
public class LacoFor {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            System.out.println("Iteração: " + i);
        }
    }
}
For-Each
O Java também suporta o laço for-each, útil para percorrer coleções ou arrays.
Exemplo básico:
public class LacoForEach {
    public static void main(String[] args) {
        String[] nomes = {"Gaspar", "Laura", "Cecília"};
        for (String nome : nomes) {
            System.out.println("Nome: " + nome);
        }
    }
}
Exemplo com Streams e forEach:
import java.util.List;
public class LacoStreamForEach {
    public static void main(String[] args) {
        List<String> nomes = List.of("Gaspar", "Laura", "Cecília");
        nomes.forEach(nome -> System.out.println("Nome: " + nome));
        // ou
        nomes.stream().forEach(nome -> System.out.println("Nome: " + nome));
    }
}
Laço While
O while executa um bloco de código enquanto a condição for verdadeira. Ele é mais flexível que o for, mas pode ser mais suscetível a erros, como laços infinitos.
Sintaxe Básica
while (condição) {
    // Código a ser executado
}
Exemplo
public class LacoWhile {
    public static void main(String[] args) {
        int contador = 0;
        while (contador < 5) {
            System.out.println("Contador: " + contador);
            contador++;
        }
    }
}
Laço Do-While
O do-while é semelhante ao while, mas garante que o bloco de código seja executado pelo menos uma vez, mesmo que a condição seja falsa.
Sintaxe Básica
do {
    // Código a ser executado
} while (condição);
Exemplo
public class LacoDoWhile {
    public static void main(String[] args) {
        int contador = 0;
        do {
            System.out.println("Contador: " + contador);
            contador++;
        } while (contador < 5);
    }
}
Exemplo com break e return
O break termina o laço imediatamente, enquanto o return finaliza o método em que o laço está inserido.
public class BreakReturnExample {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i == 5) {
                System.out.println("Parando no 5 com break");
                break;
            }
            System.out.println("Valor: " + i);
        }
        for (int i = 0; i < 10; i++) {
            if (i == 5) {
                System.out.println("Saindo do método no 5 com return");
                return;
            }
            System.out.println("Valor: " + i);
        }
    }
}
Exemplo com Laço Rotulado
Os laços rotulados permitem interromper ou continuar um laço externo específico usando um rótulo.
public class LacoRotulado {
    public static void main(String[] args) {
        nomeDoFor:
        for (int i = 0; i < 3; i++) {
            for (int j = 2; j < 5; j++) {
                System.out.println("i: " + i + ", j: " + j);
                if (i == j) {
                    System.out.println("Interrompendo o laço externo quando i == j");
                    break nomeDoFor;
                }
            }
        }
    }
}
Conclusão
Os laços de repetição são ferramentas poderosas no desenvolvimento Java. Saber escolher entre for, while e do-while, além de aplicar conceitos como Streams, break, return e rótulos, é essencial para criar soluções eficientes e legíveis. Aplicar boas práticas na utilização dessas estruturas ajuda a evitar erros comuns e garante que seu código seja mais fácil de entender e manter.
Em futuros posts da série "Aprendendo Java do Zero: Guia Completo para Iniciantes", abordaremos o tema "Conversão de Tipos e Casting em Java: Dicas para Evitar Erros Comuns"!