Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida sobre o condicional IF e o SWITCH

Olá! Seria possível substituir o condicional "if" pelo "switch" no Java? Para validar cada tipo de funcionário, a referência foi o atributo tipo, sendo 0 para funcionário comum, 1 para gerente e 2 para diretor. No exemplo foi utilizado o condicional "if" no método para fazer a verificação.

public class FuncionarioTeste {

        private String nome;
        private String cpf;
        private double salario;
        private int tipo = 0;  //0 = Funcionário comum; 1 = Gerente; 2 = Diretor

        public double getBonificacao() {

            if(this.tipo == 0) { // Funcionário comum;
                return this.salario * 0.1;
            } else if(this.tipo == 1) { // Gerente;
                return this.salario;
            } else {
                return this.salario + 1000.0;
            }

        }

Seria possível substituir a condicional "if" pelo "switch" desse jeito?

public double getBonificacao(){
    switch (this.tipo){
        case 0:
            return this.salario * 0.1;
        case 1:
            return this.salario;
        case 2:
            return this.salario + 1000.0;                        
        default:
                break;
        }
}

Infelizmente, o código com o "switch" não está funcionando. Surge a mensagem "Este método deve retornar um resultado do tipo double". Fiz esse teste para descobrir momentos que o "switch" pode ser utilizado. Poderia me dar alguns exemplos?

3 respostas
solução!

Olá David, tudo bem? Sim, é possível substituir o condicional "if" pelo "switch" no Java para fazer a verificação do tipo de funcionário. O código que você escreveu com o "switch" está correto, exceto por um detalhe: o "default" não está retornando um valor do tipo double. O correto seria:

public double getBonificacao(){
    switch (this.tipo){
        case 0:
            return this.salario * 0.1;
        case 1:
            return this.salario;
        case 2:
            return this.salario + 1000.0;
        default:
            return 0.0; // ou outro valor adequado, caso necessário
    }
}

Quanto a exemplos de quando o "switch" pode ser utilizado, ele é uma boa opção quando há uma quantidade finita de valores possíveis para uma variável ou expressão. Alguns exemplos de uso do "switch" seriam para identificar o dia da semana a partir de um número inteiro (de 1 a 7) ou a operação matemática a ser realizada (adição, subtração, multiplicação ou divisão). Em geral, o "switch" é mais eficiente do que vários "if" encadeados, especialmente quando há muitas opções a serem testadas.

Olá, bom dia, bom o switch não é bom nesses casos, a manutencao desse código seria bem complicada, nesse caso o ideal é usar polimorfismo, criando uma classe abstrata Funcionario, com um metodo getBonificacao(), e entao implementar esse metodo para cada tipo de funcionario, vou dar um exemplo:

public abstract class Funcionario {
    private double salario;

    public Funcionario(double salario) {
        this.salario = salario;
    }

    public double getSalario() {
        return salario;
    }

    public abstract double getBonificacao();
}

public class FuncionarioComum extends Funcionario {
    public FuncionarioComum(double salario) {
        super(salario);
    }

    @Override
    public double getBonificacao() {
        return getSalario() * 0.1;
    }
}

public class Gerente extends Funcionario {
    public Gerente(double salario) {
        super(salario);
    }

    @Override
    public double getBonificacao() {
        return getSalario() * 0.2;
    }
}

Dessa forma creio que seja a melhor alternativa para esse problema, agora sobre switch é pra casos que as possibilidades não possam crescer, ou se crescer que seja poucas vezes, como dias da semana, não vai haver mais dias, são somente 7, então talvez essa implementação faça sentido

int dia = 3;
switch (dia) {
    case 1:
        System.out.println("Domingo");
        break;
    case 2:
        System.out.println("Segunda-feira");
        break;
    case 3:
        System.out.println("Terça-feira");
        break;
    case 4:
        System.out.println("Quarta-feira");
        break;
    case 5:
        System.out.println("Quinta-feira");
        break;
    case 6:
        System.out.println("Sexta-feira");
        break;
    case 7:
        System.out.println("Sábado");
        break;
    default:
        System.out.println("Dia inválido");
        break;
}

Eu entendi. No caso do meu código, ele precisa retornar um valor do tipo double em todos os "case" e no "default" . Eu irei colocar no "default" o mesmo retorno caso a atributo "tipo" seja igual a 0 ou colocarei 0.0. Muito obrigado!

Eu compreendi os melhores momentos para utilizar o "switch".

Eu agradeço a sugestão de criar uma classe abstrata e utilizar o polimorfismo!