7. Controle de Fluxo em Java: if, else, switch, loops
O controle de fluxo é um dos conceitos fundamentais na programação em Java, pois permite que o programa tome decisões e execute repetições de código de acordo com condições específicas. Neste capítulo, vamos explorar os principais elementos de controle de fluxo: if, else, switch e os loops for, while e do-while.
Condicional if-else
O if é a estrutura de controle mais básica. Ele testa uma condição e, se essa condição for verdadeira (true), executa um bloco de código. Caso contrário, o programa continua sua execução após o bloco if. A estrutura else, que é opcional, permite definir um bloco de código que será executado se a condição do if não for verdadeira.
if (condicao) {
    // Bloco de código que será executado se condicao for verdadeira
} else {
    // Bloco de código que será executado se condicao for falsa
}
É possível encadear múltiplas instruções if-else para testar várias condições.
if (condicao1) {
    // Bloco de código para condicao1 verdadeira
} else if (condicao2) {
    // Bloco de código para condicao2 verdadeira
} else {
    // Bloco de código se nenhuma das condições anteriores for verdadeira
}
Estrutura switch
O switch é uma forma de substituir múltiplos if-else quando se deseja comparar a mesma variável com diferentes valores. A variável é testada contra uma série de valores (case) e, quando encontra uma correspondência, executa o bloco de código associado a esse valor. A palavra-chave break é usada para sair do switch após a execução de um bloco de código. O default é opcional e define o código a ser executado se nenhum case corresponder.
switch (variavel) {
    case valor1:
        // Código para valor1
        break;
    case valor2:
        // Código para valor2
        break;
    // ...
    default:
        // Código se nenhum case corresponder
}
Loops: for, while e do-while
Os loops permitem executar um bloco de código repetidamente enquanto uma condição for verdadeira. Existem três tipos principais de loops em Java:
- for: Geralmente usado quando o número de iterações é conhecido. A sintaxe do 
forinclui a inicialização, a condição de continuação do loop e a expressão de incremento ou decremento, tudo em uma única linha. - while: Executa um bloco de código enquanto uma condição for verdadeira. A condição é avaliada antes da execução do bloco de código, o que significa que o bloco pode nunca ser executado se a condição for falsa desde o início.
 - do-while: Semelhante ao 
while, mas a condição é avaliada após a execução do bloco de código, garantindo que o bloco seja executado pelo menos uma vez. 
Loop for
for (inicializacao; condicao; incremento) {
    // Código a ser repetido
}
Exemplo:
for (int i = 0; i < 10; i++) {
    System.out.println("i = " + i);
}
Loop while
while (condicao) {
    // Código a ser repetido
}
Exemplo:
int i = 0;
while (i < 10) {
    System.out.println("i = " + i);
    i++;
}
Loop do-while
do {
    // Código a ser repetido
} while (condicao);
Exemplo:
int i = 0;
do {
    System.out.println("i = " + i);
    i++;
} while (i < 10);
Controle de Fluxo Avançado
Além das estruturas básicas, existem comandos como break e continue que oferecem controle adicional sobre os loops. O break é usado para sair de um loop imediatamente, enquanto o continue pula para a próxima iteração do loop.
Uso do break
for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break; // Sai do loop quando i é igual a 5
    }
    System.out.println("i = " + i);
}
Uso do continue
for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue; // Pula para a próxima iteração se i for par
    }
    System.out.println("i = " + i);
}
É importante notar que o uso excessivo de break e continue pode tornar o código difícil de ler e manter. Portanto, deve-se usá-los com cautela e apenas quando realmente melhorarem a clareza ou a eficiência do código.
Conclusão
O controle de fluxo é essencial para a criação de programas dinâmicos e interativos em Java. Compreender e utilizar eficientemente as estruturas if-else, switch e os loops for, while e do-while permite que você escreva código que responda a diferentes condições e execute tarefas repetitivas de maneira eficaz. A prática constante desses conceitos é fundamental para se tornar um programador Java competente.