Como usar switch case em Java?
- #Java
Em algumas situações específicas na programação, temos a necessidade de fazer várias verificações condicionais consecutivas. Isso ocorre, por exemplo, em programas com menus, onde o usuário precisa escolher uma opção.
Um outro exemplo é um programa que recebe um número inteiro como entrada e retorna o mês correspondente a esse número. A solução convencional seria criar uma variável para armazenar o nome do mês e realizar pelo menos 12 comparações entre a entrada digitada e os meses correspondentes. O que é bem repetitivo e tedioso de fazer todas essas comparações.
Contudo, existe uma alternativa mais elegante: o uso do método switch-case.
O que é e sintaxe
O switch-case é uma estrutura de controle de fluxo, assim como o if-else, porém simplifica a lógica condicional e torna o código mais legível.
A estrutura básica é a seguinte:
public class Program {
public static void main(String[] args) {
switch(expressao){
case valor1:
//código
break;
case valor2:
//código
break;
default:
//código
}
}
}
O funcionamento em si é o seguinte:
- A expressão dentro do switch é avaliada.
- Os case representam valores possíveis da expressão.
- Se um case corresponder ao valor da expressão, o código dentro desse case é executado.
- É importante usar break para sair do switch após a execução de um case.
- O default é um caso opcional e é executado se nenhum case coincidir.
Exemplo prático:
public class Program {
public static void main(String[] args) {
int numero = 2;
String resultado;
switch (numero) {
case 1:
resultado = "Um";
break;
case 2:
resultado = "Dois";
break;
default:
resultado = "Outro Número";
}
}
}
Quando usar o if-else e quando usar o switch-case
Foi explicado o que é, alguns exemplos de uso e a sintaxe do switch-case. Entretanto, ainda não está claro quando usar o switch-case e quando usar o if-else. Seguem abaixo algumas orientações quanto ao uso dessa estrutura:
Use switch-case quando:
- Comparação direta com valores constantes: Se a expressão a ser comparada tem valores claramente definidos e constantes, o switch-case é mais legível e eficiente.
- Várias opções com base em uma única variável: Quando a lógica envolve várias verificações para uma única variável, o switch-case pode oferecer um código mais limpo e estruturado.
Use if-else quando:
- Condições complexas: Se as condições envolvem expressões mais complexas ou lógica que não pode ser facilmente expressa com comparações de igualdade, o if-else pode ser mais flexível
- Comparação com intervalos: Se as condições envolvem comparação de intervalos numéricos ou outras comparações mais complexas, o if-else é geralmente mais adequado.
Portanto, usa-se if-else para lógica mais complexa e condições não tão diretas e o switch-case para situações em que você está comparando uma variável com valores fixo. Mas, em alguns casos a escolha entre if-else e switch-case é uma questão de preferência pessoal, desde que o uso esteja correto, você pode escolher.
Vamos praticar
Após explicarmos o que é switch-case e quando usar, então já podemos praticar um pouquinho. Abaixo temos uma questão simples em que podemos usar a estrutura em questão, então eu proponho que você leia a questão com calma e interprete.
Uma prática interessante é fazer a questão com if-else e em seguinda refatorar para a estrutura switch-case.
[Questão Autoral] Barão Burger
O Barão Burger, franquia de hambúrgueres artesanais, contratou seus serviços para desenvolver um programa de caixa eficiente. O programa receberá o código do pedido e o valor pago pelo cliente, proporcionando uma das três respostas adequadas:
1. "Transação concluída com sucesso!" se o valor estiver correto e não houver necessidade de troco.
2. "Troco de X reais" se houver troco, onde X representa o valor a ser devolvido ao cliente.
3. "Saldo insuficiente! Faltam X reais" se houver insuficiência de pagamento para completar o valor do combo escolhido.
Os preços dos são os seguintes:
1 - Barãozinho = R$ 12
2 - Barão Banco = R$ 23
3 - Barão Duplo = R$ 31
4 - Barão Nordestino = R$ 28
5 - Barão Fit = R$ 15
Minha solução com switch-case e if-else
Veja essa solução após ter feito a sua implementação.
import java.util.Scanner;
public class BaraoBurgerProgram {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Bem-vindo ao Barão Burger!");
System.out.println("Escolha o combo desejado:");
System.out.println("1 - Barãozinho = R$ 12");
System.out.println("2 - Barão Banco = R$ 23");
System.out.println("3 - Barão Duplo = R$ 31");
System.out.println("4 - Barão Nordestino = R$ 28");
System.out.println("5 - Barão Fit = R$ 15");
int pedido, valor, troco, dinheiro;
System.out.print("Digite o número do combo desejado: ");
pedido = scanner.nextInt();
System.out.print("Digite o valor pago pelo cliente: ");
dinheiro = scanner.nextInt();
// Atribui o valor correspondente ao combo escolhido
switch (pedido) {
case 1:
valor = 12; break;
case 2:
valor = 23; break;
case 3:
valor = 31; break;
case 4:
valor = 28; break;
case 5:
valor = 15; break;
default:
valor = 0;
break;
}
troco = dinheiro - valor;
// Adequando o resultado da saída com base no valor do troco
if (troco == 0) {
System.out.println("Transação concluída com sucesso!");
} else if (troco > 0) {
System.out.printf("Troco de %d reais\n", troco);
} else {
System.out.printf("Saldo insuficiente! Faltam %d reais\n", -troco);
}
}
}
Comentando a solução
Vou fazer breves comentários sobre essa implementação. Nesta solução, foi utilizado o switch-case para atribuir o valor do pedido conforme a escolha do cliente a partir do código. Isso é possível, pois o valor do combo é constante.
Por outro lado, o if-else foi empregado para imprimir a saída adequada, considerando valores variáveis. O caso em que o troco é zero é constante. Porém, observe que os valores do troco ou da insuficiência de dinheiro não são constantes, e é por isso que usamos if-else nesse cenário.
Se tiver alguma dúvidas ou se precisar de mais esclarecimentos, sinta-se à vontade para perguntar!
Conclusão
Neste artigo, exploramos o uso do switch-case em Java como uma alternativa eficaz para simplificar verificações condicionais. É importante ressaltar que a escolha entre switch-case e if-else dependerá da natureza das condições.
Segue o link da documentação oficial a qual foi utilizada com fonte para o artigo: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html.