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 -> e yield para blocos.
  • Tratar divisão por zero com uma verificação if dentro do case.
  • Imprimir o resultado no formato Resultado: X ou mensagens de erro exatas.
  • Usar a = 10, b = 2, opcao = 4 para 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

  1. Definimos a = 10, b = 2 e opcao = 4.
  2. A switch expression avalia opcao e escolhe o case correspondente.
  3. Para os cases 1, 2 e 3, usamos expressões diretas com ->.
  4. No case 4, usamos um bloco { ... } para verificar se b == 0. Se for, yield retorna a mensagem de erro; senão, retorna o resultado da divisão.
  5. O valor retornado é atribuído a resultado e 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 yield dentro 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 break em vez de yield: break não é permitido em switch expressions; use yield.
  • 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