Desafio Java
Menu com switch expression e validação
Enunciado
Crie um programa que simule um menu com as opções: 1 - Somar, 2 - Subtrair, 3 - Multiplicar, 4 - Dividir. Leia dois números inteiros a e b (fixos no código) e a opção opcao (int). Use uma switch expression para escolher a operação e imprimir o resultado. Se a opção for inválida, imprima "Opção inválida". Para divisão, se b for zero, imprima "Divisão por zero".
Requisitos
- Usar switch expression com
->eyieldpara blocos. - Tratar divisão por zero com uma verificação
ifdentro do case. - Imprimir o resultado no formato
Resultado: Xou mensagens de erro exatas. - Usar
a = 10,b = 2,opcao = 4para o exemplo.
Código inicial
public class MenuCalculadora {
public static void main(String[] args) {
int a = 10;
int b = 2;
int opcao = 4;
// Use switch expression
}
}
Saída esperada
Resultado: 5
Ver dica
Dentro do case 4, use um bloco { ... } com if (b == 0) yield "Divisão por zero"; else yield "Resultado: " + (a / b);.
Mostrar solução
public class MenuCalculadora {
public static void main(String[] args) {
int a = 10;
int b = 2;
int opcao = 4;
String resultado = switch (opcao) {
case 1 -> "Resultado: " + (a + b);
case 2 -> "Resultado: " + (a - b);
case 3 -> "Resultado: " + (a * b);
case 4 -> {
if (b == 0) {
yield "Divisão por zero";
} else {
yield "Resultado: " + (a / b);
}
}
default -> "Opção inválida";
};
System.out.println(resultado);
}
}
Passo a passo
- Definimos
a = 10,b = 2eopcao = 4. - A switch expression avalia
opcaoe escolhe o case correspondente. - Para os cases 1, 2 e 3, usamos expressões diretas com
->. - No case 4, usamos um bloco
{ ... }para verificar seb == 0. Se for,yieldretorna a mensagem de erro; senão, retorna o resultado da divisão. - O valor retornado é atribuído a
resultadoe impresso.
Por que funciona
A switch expression exige que todos os caminhos retornem um valor (via -> ou yield). O default cobre opções inválidas. A verificação de divisão por zero evita ArithmeticException.
Erros comuns
- Esquecer o
yielddentro do bloco: causa erro de compilação, pois a switch expression deve produzir um valor. - Não incluir
default: o compilador pode reclamar que a expressão não cobre todos os valores. - Usar
breakem vez deyield:breaknão é permitido em switch expressions; useyield. - Dividir por zero sem verificar: lança
ArithmeticException. Sempre verifique.
Outra forma de resolver
Usar if/else encadeados:
if (opcao == 1) resultado = "Resultado: " + (a + b);
else if (opcao == 2) resultado = "Resultado: " + (a - b);
// ...
Menos conciso e mais propenso a erros de repetição. A switch expression é mais clara para múltiplas opções.
Saída esperada
Resultado: 5