Francisca Freire
Francisca Freire07/02/2024 22:29
Compartilhe

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.

Compartilhe
Comentários (2)
Alex Lopes
Alex Lopes - 19/02/2024 23:17

Parabéns, seu artigo ficou maravilhoso!

Miquéias Silva
Miquéias Silva - 20/02/2024 14:22

O seu ficou bom, mas o meu ficou melhor: https://web.dio.me/articles/explorando-o-map-em-java-como-utilizar-esta-funcao-poderosa-para-manipular-colecoes-de-dados


Deveria mudar este método de escolha dos ganhadores, deveria ser por votação, onde os avaliadores escolheria os 10 melhores com critérios claros e objetivos e colocaria para votação aqui.