Decisão
Neste tópico, vamos reforçar as estruturas de decisão e conhecer a estrutura switch. O if/else decide entre dois caminhos; o switch serve para escolher entre vários caminhos a partir de um único valor. Vamos começar relembrando o if/else em Java e, em seguida, conhecer o switch.
Ao final, você vai saber quando usar if/else e quando usar switch.
Parte 1: Reforçando decisões com if/else
Seção intitulada “Parte 1: Reforçando decisões com if/else”Uma decisão permite que o programa siga caminhos diferentes conforme uma condição. Em Java, usamos if e else.
if (condicao) { // executa se a condição for verdadeira} else { // executa se a condição for falsa}Veja um exemplo com uma condição simples:
import java.util.Scanner;
public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
System.out.print("Qual é a vida do personagem? "); int vida = scanner.nextInt();
if (vida > 0) { System.out.println("O personagem continua na batalha."); } else { System.out.println("O personagem foi derrotado."); }
scanner.close(); }}Também podemos combinar condições com os operadores lógicos && (e) e || (ou):
if (vida > 0 && temPocao) { System.out.println("O personagem pode continuar lutando.");}Parte 2: Escolhendo entre vários caminhos com switch
Seção intitulada “Parte 2: Escolhendo entre vários caminhos com switch”Quando a decisão depende de comparar um único valor com várias opções, o if/else pode ficar repetitivo. Nesses casos, o switch deixa o código mais organizado.
switch (variavel) { case valor1: // código executado se variavel == valor1 break; case valor2: // código executado se variavel == valor2 break; default: // código executado se nenhum caso corresponder break;}Cada case representa uma opção. O break serve para encerrar o switch depois de executar aquele caso. O default é opcional e funciona como um “senão”: ele executa quando nenhum case corresponde.
Veja um exemplo com um menu de opções:
import java.util.Scanner;
public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
System.out.println("1 - Atacar"); System.out.println("2 - Curar"); System.out.println("3 - Fugir"); System.out.print("Escolha uma ação: "); int opcao = scanner.nextInt();
switch (opcao) { case 1: System.out.println("Você atacou o inimigo!"); break; case 2: System.out.println("Você recuperou parte da sua vida."); break; case 3: System.out.println("Você tentou fugir da batalha."); break; default: System.out.println("Opção inválida!"); break; }
scanner.close(); }}Erros comuns no switch
Seção intitulada “Erros comuns no switch”- Esquecer o
break: o programa continua executando oscaseseguintes, mesmo depois de encontrar o certo. - Esquecer o
default: opções inválidas ficam sem tratamento. - Usar
switchpara condições compostas: oswitchcompara um valor por vez, então não serve para condições comovida > 0 && temPocao.
Parte 3: Juntando os dois
Seção intitulada “Parte 3: Juntando os dois”Na prática, if e switch costumam aparecer juntos. O switch escolhe a ação, e o if valida o estado antes ou depois.
Veja um exemplo de menu de combate que usa os dois:
import java.util.Scanner;
public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
int vida = 100; int pocoes = 2;
System.out.println("1 - Atacar"); System.out.println("2 - Curar"); System.out.print("Escolha uma ação: "); int opcao = scanner.nextInt();
switch (opcao) { case 1: System.out.println("Você atacou o inimigo!"); break; case 2: if (pocoes > 0) { vida = vida + 20; pocoes = pocoes - 1; System.out.println("Você se curou. Vida atual: " + vida); } else { System.out.println("Você não tem poções!"); } break; default: System.out.println("Opção inválida!"); break; }
scanner.close(); }}Nesse exemplo:
- o
switchdecide qual ação executar; - o
ifverifica se ainda há poções antes de curar; - o
breakencerra cada caso.
if/else ou switch?
Seção intitulada “if/else ou switch?”| Situação | Melhor escolha |
|---|---|
| Duas possibilidades (verdadeiro/falso) | if/else |
Condições compostas (&&, ` | |
| Comparar o mesmo valor com várias opções fixas | switch |
| Menu de opções numeradas | switch |