Switch Case Java: usando estruturas de decisão com várias condições!

O switch case Java é uma estrutura muito importante para testar condições de uma forma simples e intuitiva, reduzindo a necessidade de criar blocos de código complexo usando vários if else encadeados.

No entanto, é preciso cuidado ao utilizá-la, pois qualquer pequeno erro na lógica empregada para definir as condições de teste pode causar diversos erros no programa.

Para evitar que isso aconteça, é necessário entender como de fato o switch case funciona e quando é melhor utilizar essa estrutura no lugar do if else. E é exatamente sobre isso que vamos falar neste post. Logo abaixo, veja o que preparamos para você:

Continue com a gente e tenha uma boa leitura!

O que é o Switch case Java e para que serve?

O switch case é uma estrutura de decisão usada quando precisamos testar condições para determinar qual função será executada em seguida. Assim, essa expressão nos permite substituir múltiplos “if else if”, tornando o código criado mais simples, legível e fácil de manter.

Além disso, a estrutura switch case no Java trabalha com vários tipos de dados, como byte, short, long, string, int, enum, entre outros.

Como funciona o Switch case Java? 

Explicação em fluxograma do Switch Case Java

O funcionamento da estrutura switch é bastante simples. Inicialmente, o valor da variável passada no switch é comparado com os valores fornecidos em cada case. Se um desses valores for igual ao valor da variável, o bloco de código do case em questão será executado.

As comparações da estrutura switch são sempre feitas de forma sequencial e não há limite para a quantidade de cases que cada switch pode ter. Além disso, a estrutura switch também pode conter as declarações opcionais “break” e “default”, que explicaremos melhor nos próximos tópicos.

Qual a Sintaxe do Switch case Java?

Para utilizar o Switch case em java, usamos a seguinte sintaxe:

switch (expressão) {

case valor1:

// bloco de código que será executado

break;

case valor2:

// bloco de código que será executado

break;

case valorN:

// bloco de código que será executado

break;

default:

// bloco de código que será executado se nenhum dos cases for aceito

}

Sendo que:

  • switch (expressão): é onde passamos a variável de teste que servirá de referência para as comparações que o programa deve fazer;
  • case: é onde definimos o valor que será comparado com a variável de teste e o código que será executado caso sejam compatíveis;
  • break: é a declaração opcional de quebra;
  • default: é a declaração opcional padrão, na qual definimos o código que deve ser executado, se nenhum dos valores declarados nos cases for compatível com o valor passado na variável de teste.

No entanto, ao usar a estrutura switch case é importante lembrar que:

  • cada switch pode conter um ou N cases;
  • os valores dos cases não podem ser repetidos, caso contrário ocorrerá um erro durante a compilação do código;
  • o valor de cada case deve ser do mesmo tipo da expressão switch;
  • os valores dos cases não podem ser variáveis;
  • a variável passada no switch deve ser de um dos tipos aceitos pela estrutura (short, byte, long, int, enum, string).

Como é usada a instrução Break em Switch case?

Como foi dito, a estrutura do switch case pode conter a instrução break. Essa é uma declaração opcional que, como o próprio nome indica, é usada para interromper a execução do código em um determinado ponto

Mas por que esse comando é importante? Bom, algo que devemos dizer é que as comparações do switch continuam sendo feitas de forma sequencial mesmo que um case compatível tenha sido encontrado. 

Ou seja, quando não há um comando indicando que o código deve ser interrompido, o switch faz a comparação de todos os cases sem exceção, independentemente se um deles for compatível ou não.

Obviamente, isso aumenta o consumo de recursos e o tempo de execução do código, o que não é algo desejável. É para evitar que isso aconteça que utilizamos o break no fim de cada case. Nesse ponto não existem grandes segredos, pois para utilizá-lo basta acrescentar a seguinte linha de código após os comandos declarados no case:

break;

4 exemplos de uso do Switch case Java!

Agora que você já tem uma boa noção do que é e como funciona o Switch case no Java, que tal aprofundar ainda mais o seu entendimento? Para isso, preparamos alguns exemplos simples e práticos que você pode observar logo abaixo. Vamos em frente?

1. Retornando o número escolhido com Switch case

Nesse primeiro exemplo, vamos nos manter em algo simples para facilitar o aprendizado, ok? Para isso, criamos um pequeno programa que pede um número para a pessoa usuária, lê o número digitado no teclado e retorna como saída uma frase indicando qual foi o número escolhido. Observe:

import java.util.Scanner;
public class Switch {
 public static void main(String[] args) {
  Scanner entrada = new Scanner(System.in);
  System.out.println("Escolha um número entre 1 a 10");
  int numero = entrada.nextInt();
   switch (numero) {
     case 1:
       System.out.println("O número escolhido foi: 1.");
       break;
     case 2:
       System.out.println("O número escolhido foi: 2.");
       break;
     case 3:
       System.out.println("O número escolhido foi: 3.");
       break;
     case 4:
       System.out.println("O número escolhido foi: 4.");
       break;
     case 5:
       System.out.println("O número escolhido foi: 5.");
       break;
     case 6:
       System.out.println("O número escolhido foi: 6.");
       break;
     case 7:
       System.out.println("O número escolhido foi: 7.");
       break;
     case 8:
       System.out.println("O número escolhido foi: 8.");
       break;
     case 9:
       System.out.println("O número escolhido foi: 9.");
       break;
     case 10:
       System.out.println("O número escolhido foi: 10.");
       break;
     default:
       System.out.println("O número escolhido é inválido! Digite um número entre 1 a 10.");
   }
 }
}

Para o exemplo dado, caso o número escolhido seja “9”, a saída esperada é a seguinte:

O número escolhido foi: 9.

Por outro lado, se o número escolhido for 20, por exemplo, o programa deve retornar a seguinte saída:

O número escolhido é inválido! Digite um número entre 1 a 10.

2. Retornando um mês com Switch case

Ainda nos mantendo em exemplos simples, no código a seguir temos um programa parecido com o anterior, porém dessa vez retornaremos os meses do ano de acordo com a entrada dada. Ou seja, para cada número de 1 a 12, o código deve retornar seu respectivo mês. Caso a entrada seja inválida, o programa retorna uma saída padrão. Veja:

import java.util.Scanner;
public class Switch {
 public static void main(String[] args) {
  Scanner entrada = new Scanner(System.in);
  System.out.println("Digite o número referente ao mês desejado");
  int numero = entrada.nextInt();
   switch (numero) {
     case 1:
       System.out.println("O mês é Janeiro!");
       break;
     case 2:
       System.out.println("O mês é Fevereiro!");
       break;
     case 3:
       System.out.println("O mês é Março!");
       break;
     case 4:
       System.out.println("O mês é Abril!");
       break;
     case 5:
       System.out.println("O mês é Maio!");
       break;
     case 6:
       System.out.println("O mês é Junho!");
       break;
     case 7:
       System.out.println("O mês é Julho!");
       break;
     case 8:
       System.out.println("O mês é Agosto!");
       break;
     case 9:
       System.out.println("O mês é Setembro!");
       break;
     case 10:
       System.out.println("O mês é Outubro!");
       break;
     case 11:
       System.out.println("O mês é Novembro!");
       break;
     case 12:
       System.out.println("O mês é Dezembro!");
       break;
     default:
       System.out.println("Não existe um mês correspondente ao número escolhido! Digite um número entre 1 a 12.");
    }
  }
}

Para o exemplo acima, caso a entrada dada seja o número 7, o programa deve retornar a saída:

O mês é julho!

No entanto, se a entrada for um número diferente dos indicados, como 15, a saída esperada é a seguinte:

Não existe um mês correspondente ao número escolhido! Digite um número entre 1 a 12.

3. Calculando desconto com Switch case

Prosseguindo com nossos exemplos, agora vamos demonstrar uma forma de usar o switch case para calcular descontos baseados no preço de um item. No entanto, para simplificar o exemplo, desta vez não vamos ler o preço a partir do teclado. Nesse caso, usaremos uma variável já inicializada com um valor específico apenas para fins de demonstração. Observe:

public class CalcularDesconto {
 public static void main(String[] args) {
 int preco = 10;
  switch (preco) {
     case 10:
        System.out.println("O novo preço é: " + (preco*0.9));
        break;
     case 20:
        System.out.println("O novo preço é: " + (preco*0.8));
        break;
     case 50:
        System.out.println("O novo preço é: " + (preco*0.7));
        break;
     case 100:
        System.out.println("O novo preço é: " + (preco*0.6));
        break;
     default:
       System.out.println("Não há descontos disponíveis para esse valor!");
  }
 }
}

Após executar o código do exemplo, a saída esperada é a seguinte:

O novo preço é: 9.0

Por outro lado, se a variável “preço” for inicializada com um valor diferente dos valores definidos nas cases, como 30 por exemplo, o programa deve retornar a seguinte linha de texto:

Não há descontos disponíveis para esse valor!

4. Calculando desconto com Switch case aninhadas

Assim como em outras linguagens de programação, o switch case no Java também permite o uso de cases aninhadas. Isso significa que, se necessário, é possível aplicar uma condição dentro de outra condição.

No exemplo a seguir, vamos verificar o desconto disponível para uma quantidade de itens de um determinado valor. Dessa forma, mostraremos como funciona o aninhamento de cases. Veja:

public class CalcularDesconto {
 public static void main(String[] args) {
 int preco = 10;
 int quantidade = 100;
  switch (preco) {
     case 10:
       switch (quantidade) {
         case 100:
         System.out.println("O novo preço é: " + (preco*0.9));
         break;
       default:
        System.out.println("Desconto disponível apenas para 100 itens de valor igual a R$ 10!");
       }
       break;
     case 20:
       switch (quantidade) {
         case 80:
         System.out.println("O novo preço é: " + (preco*0.8));
         break;
       default:
        System.out.println("Desconto disponível apenas para 80 itens de valor igual a R$ 20!");
       }
       break;
     case 50:
       switch (quantidade) {
         case 60:
         System.out.println("O novo preço é: " + (preco*0.7));
         break;
       default:
        System.out.println("Desconto disponível apenas para 60 itens de valor igual a R$ 50!");
       }
       break;
     case 100:
       switch (quantidade) {
         case 40:
         System.out.println("O novo preço é: " + (preco*0.6));
         break;
       default:
        System.out.println("Desconto disponível apenas para 100 itens de valor igual a R$ 10!");
       }
       break;
     default:
       System.out.println("Não há descontos disponíveis para esse valor!");
  }
 }
}

Quando o código acima é executado, o retorno esperado é:

O novo preço é: 9.0

No entanto, se alteramos o valor das variáveis “preço” e “quantidade” para 20 e 10 respectivamente, a saída que deverá ser retornada é:

Desconto disponível apenas para 80 itens de valor igual a R$ 20!

Já se alterarmos apenas o valor da variável “preço” para 30, por exemplo, o programa deve retornar a saída abaixo:

Não há descontos disponíveis para esse valor!

Switch case vs If else: quais as diferenças?

Assim como o if else, a declaração switch case funciona como uma estrutura de decisão condicional. Nesse caso, como podemos diferenciá-las e saber em quais casos usar cada uma delas? Para responder essa questão, devemos observar alguns pontos importantes no funcionamento dessas estruturas, como: 

  • velocidade: dependendo da quantidade de casos que precisam ser testados no código, a velocidade de execução pode ser afetada. Por isso, se o número de casos for maior que 5, é interessante considerar utilizar a estrutura switch e não o if else;
  • valores fixos vs valores booleanos: o if else é melhor para testar condições booleanas, já a estrutura switch é melhor para testar valores fixos;
  • legibilidade do código: em muitos casos, o switch case ajuda a manter o código limpo, pois evita que uma quantidade muito grande de if else if sejam usados no programa;
  • expressão de teste: outro ponto importante que deve ser analisado é a expressão que será usada como base para o teste condicional. Isso porque o switch case aceita apenas valores fixos para teste. Por outro lado, o if else também é capaz de testar faixas de valores e condições além de valores fixos.

Agora você já sabe o que é e como funciona a estrutura switch case Java. Trata-se de um elemento simples e prático de usar, que pode ser muito útil quando precisamos substituir blocos de if else para melhorar a clareza e legibilidade de um código!

E aí, conseguimos esclarecer suas dúvidas sobre o switch case Java? Então, continue aprofundando seus conhecimentos em programação e conheça a linguagem Go!