Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

O comando switch: fazendo escolhas em Java

O comando switch: fazendo escolhas em JavaNo artigo sobre o laço do ... while de nossa apostila online Java Progressivo, mostramos como criar um menu simples.

Porém, o Java possui um recurso específico para esse propósito, que nos permite optar por algo, dependendo do que tenhamos digitado, é o comando switch.



O comando SWITCH em Java


Colocamos várias opções e vários comandos dentro do comando switch, todas as possibilidades de nosso aplicativo ou todas as opções ou rumos que nossos programas possam tomar.

O switch vai funcionar como um interruptor, pois dependendo da entrada que você der a ele, ele vai acionar somente certo(s) comando(s) dentre os que você disponibilizou.

É como se você criasse um menu, ou cardápio, e com o switch você escolhesse o que vai querer.

Declaração e Sintaxe do comando switch

Em Java, usamos e declaramos o comando switch da seguinte maneira:
switch( opção )
{
    case opção1:
            comandos caso a opção 1 tenha sido escolhida
            break;
    
    case opção2:
            comandos caso a opção 2 tenha sido escolhida
            break;
    
    case opção3:
            comandos caso a opção 3 tenha sido escolhida
            break;
    
    default:
            comandos caso nenhuma das opções anteriores tenha sido escolhida
}

A variável 'opção' geralmente é um inteiro ou caractere (também pode ser byte ou short), que o usuário digita através da classe Scanner.

Se 'opção' receber 'opção1' como entrada, são os códigos contido na 'case opção1' que serão executados.
Se 'opção' receber 'opção2' como entrada, são os códigos contido na 'case opção2' que serão executados.
Se 'opção' receber 'opção3' como entrada, são os códigos contido na 'case opção3' que serão executados.

Se 'opção' receber qualquer outra coisa que não seja 'opção1', 'opção2' ou 'opção3', são os códigos contido em 'default' que serão executados.


Exemplo de uso do comando SWITCH em Java:

Vamos criar uma calculadora que faz as operações básicas usando o comando switch.
É um aplicativo Java simples que recebe 3 dados: dois números e um caractere.

Esse caractere poderá ser '+', '-', '*' ou '/' , e representarão a operação matemática que você deseja realizar entre os números.

Vejamos:

import java.util.Scanner;

public class switchTest {
    public static void main(String[] args) {
        float numero1, numero2;
        char operacao;
        Scanner entrada = new Scanner(System.in);
        
        System.out.print("Escolha sua operação [+ - * / ]: ");
        operacao = entrada.nextLine().charAt(0);
        
        System.out.print("Entre com o primeiro número: ");
        numero1 = entrada.nextFloat();
        System.out.print("Entre com o segundo número: ");
        numero2 = entrada.nextFloat();
        System.out.println();
        
        switch( operacao )
        {
            case '+':
                System.out.printf("%.2f + %.2f = %.2f", numero1, numero2, numero1 + numero2);
                break;        
                
            case '-':
                System.out.printf("%.2f - %.2f = %.2f", numero1, numero2, numero1 - numero2);
                break;
                
            case '*':
                System.out.printf("%.2f * %.2f = %.2f", numero1, numero2, numero1 * numero2);
                break;
                
            case '/':
                System.out.printf("%.2f / %.2f = %.2f", numero1, numero2, numero1 / numero2);
                break;
            
            default:
                System.out.printf("Você digitou uma operação inválida.");        
            
        }
        

    }
}

Caso a 'opção' seja um char, coloque entre aspas simples '', caso seja string coloque entre aspas duplas "" e caso seja um número, não é necessário colocar nenhum tipo de aspas.


O real funcionamento do comando switch: sem o comando break

Omiti, propositalmente, uma informação importante.
Só é realizado um 'case' de cada vez por conta do 'break' contido em cada comando dentro dos 'case'.

Na verdade, o switch seleciona o 'case' através da 'opção' e faz com que todos os 'case' a partir daquele sejam executados.
O exemplo a seguir ilustra o real funcionamento do comando switch em Java, experimente digitar a vogal 'a':


import java.util.Scanner;

public class switchTest2 {
    public static void main(String[] args) {
        char vogal;
        Scanner entrada = new Scanner(System.in);
        
        System.out.print("Digite uma vogal minúscula: ");
        vogal = entrada.nextLine().charAt(0);
        
        
        switch( vogal )
        {
            case 'a':
                System.out.println("Você está no case da vogal 'a'");
            case 'e':
                System.out.println("Você está no case da vogal 'e'");
            case 'i':
                System.out.println("Você está no case da vogal 'i'");
            case 'o':
                System.out.println("Você está no case da vogal 'o'");
            case 'u':
                System.out.println("Você está no case da vogal 'u'");
        
            default:
                System.out.println("Você não digitou uma vogal minúscula");        
            
        }
        

    }
}


Exemplo da utilidade do comando swich sem o break

Á priori parece ser estranho essa propriedade do comando switch 'rodar' rodos os cases.
Porém, isso é uma mão na roda e se bem utilizado, só vai nos ajudar. E caso não precise, simplesmente coloque um break.

Vamos pegar o exemplo passado e deixá-lo mais robusto, à prova de usuários que tentarão digitar as vogais maiúsculas.
É uma prática bem comum em Java, é essencial que aprenda:

import java.util.Scanner;

public class switchTest3 {
    public static void main(String[] args) {
        char vogal;
        Scanner entrada = new Scanner(System.in);
        
        System.out.print("Digite uma vogal: ");
        vogal = entrada.nextLine().charAt(0);
        
        
        switch( vogal )
        {
            case 'a': case 'A':
                System.out.println("Você digitou 'a' ou 'A' ");
                break;
            
            case 'e': case 'E':
                System.out.println("Você digitou 'e' ou 'E' ");
                break;
                
            case 'i': case 'I':
                System.out.println("Você digitou 'i' ou 'I' ");
                break;
                
            case 'o': case 'O':
                System.out.println("Você digitou 'o' ou 'O' ");
                break;
                
            case 'u': case 'U':
                System.out.println("Você digitou 'u' ou 'U' ");
                break;

            default:
                System.out.println("Você não digitou uma vogal !");
            
        }
        

    }
}

Note que estamos acumulando os case minúsculos e maiúsculos de cada vogal para gerarem o mesmo comando. Essa é a prática comum. No caso, o comando é print.


Mais um exemplo útil do comando switch sem o break

Suponha que você atrasou uma conta. A cada mês que você deixa de pagar, será cobrado 1% de juros no valor inicial.
Ou seja, se você atrasar um mês, irá pagar 1%. Se atrasar 3 meses, irá pagar 3% etc.
Vamos supor que você pode atrasar, no máximo, 5 meses.

O programa pede, como entrada, dois valores:
- um float: com o valor de sua dívida inicial (valor_i)
- um inteiro: de 0 até 5, que são os meses de atraso.

Nosso programa ficaria assim:

import java.util.Scanner;

public class switchTest4 {
    public static void main(String[] args) {
        float valor_i, valor_f, juros=0;
        int meses;
        Scanner entrada = new Scanner(System.in);
        
        System.out.print("Qual o valor inicial da dívida: ");
        valor_i = entrada.nextFloat();
        
        System.out.print("Você vai atrasar quantos meses [0-5]?: ");
        meses = entrada.nextInt();
        
        switch( meses )
        {
            case 5:
                juros++;
            case 4:
                juros++;
            case 3:
                juros++;
            case 2:
                juros++;
            case 1:
                juros++;
                break;
            default:
                System.out.println("Você não digitou um valor válido de meses");
            
        }
        System.out.println("Juros: "+juros+"%");
        valor_f=( (1 + (juros/100))*valor_i);
        System.out.printf("Valor final da dívida: R$ %.2f", valor_f);

    }
}


Se cair no case 5, vai contar todos os case, até o break, somando juros=5
Se cair no case 4, vai contar todos os case, até o break, somando juros=4
Assim, analogamente, para case 3, 2 e case 1.

Ou seja, nós utilizamos o fato dos case irem se acumulando.

Exercício:
Crie um programa que receba um inteiro, de 1 até 12, representando os meses do ano e retorne o número de dias do mês.
Use switch e não use break. Acumule os case.
Solução

Um comentário:

Rck disse...

No primeiro exemplo da Calculadora eu quis colocar para digitar o operador apos a entrada do primeiro numero, seguindo a ordem que fazemos ao utilizar uma calculadora real, porem estava dando erro ai pesquisei no google e achei uma solucao;

no caso o erro que deu foi por conta da linha, lembrando que eu coloquei essa linha depois de pedir o primeiro numero.

operacao = entrada.nextLine().charAt(0);

entao a solucao encontrada foi utilizar a seguinte linha

operacao - entrada.next().charAt(0);

Ai funcionou.

Contribuir com o Java Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo


Tutoriais de Java