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

[Dúvida] setTipo

A minha duvida é a seguinte: O meu "setTipo(2)" (o tipo referente a Diretor) não está efetuando a operação correta, a saída ocorre como se tivesse um "f3.getSalario * 2 + 1000" sendo que o que eu quero é apenas "f3.getSalario + 1000", onde está o erro no meu código?

Segue meu código:

public class FuncionarioTeste {

    private String nome;
    private String cpf;
    private double salario;
    private int tipo; // 0 - Funcionario Comum, 1 - Gerente, 2 - Diretor;

    public String getNome() {
        return nome;
    }

    public double getBonificacao() {

        if (this.tipo == 0) { // Funcionario Comum
            return this.salario * 0.1;
        } else if (this.tipo == 1) { // Gerente
            return this.salario * 0.2;
        } else { // Diretor
            return this.salario + 1000;
        }
    }

    public void setTipo(int tipo) {
        this.tipo = tipo;
    }

    public int getTipo() {
        return tipo;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public double getSalario() {
        return salario;
    }

    public void setSalario(double salario) {
        this.salario = salario;
    }
}

// Teste.java

public class Teste {
    public static void main(String[] args) {
        FuncionarioTeste f1 = new FuncionarioTeste();
        f1.setSalario(2000);
        System.out.println(f1.getTipo());
        System.out.println(f1.getSalario() + f1.getBonificacao());

        FuncionarioTeste f2 = new FuncionarioTeste();
        f2.setTipo(1);
        f2.setSalario(3000);
        System.out.println(f2.getTipo());
        System.out.println(f2.getSalario() + f2.getBonificacao());

        FuncionarioTeste f3 = new FuncionarioTeste();
        f3.setTipo(2);
        f3.setSalario(4000);
        System.out.println(f3.getTipo());
        System.out.println(f3.getSalario() + f3.getBonificacao());
    }
}

A saída:

0 2200.0 1 3600.0 2 9000.0

2 respostas
solução!

Olá, tudo bem com você?

O retorno de 9000 está acontecendo pois dentro do método getBonificacao():

public double getBonificacao() {
        if (this.tipo == 0) { // Funcionario Comum
            return this.salario * 0.1;
        } else if (this.tipo == 1) { // Gerente
            return this.salario * 0.2;
        } else { // Diretor
            return this.salario + 1000;
        }
    }

O retorno para o tipo 2, que cai no else é this.salario + 1000, ou seja, no caso de um salário de 4000, o retorno será 4000 + 1000, ou 5000. Quando chamamos isso na classe de teste:

FuncionarioTeste f3 = new FuncionarioTeste();
f3.setTipo(2);
f3.setSalario(4000);
System.out.println(f3.getTipo());
System.out.println(f3.getSalario() + f3.getBonificacao());

Estamos mostrando o salário com f3.getSalario() + a bonificação f3.getBonificação, sendo que nesse caso o salário vale 4000 e a bonificação passa a valer salario + 1000, ou seja, 5000. Assim, o retorno acaba sendo 4000 + 5000, que dá o resultado de 9000.

Para corrigir esse comportamento, basta alterar o código do método getBonificação, para dentro do bloco else, o retorno ser apenas 1000:

public double getBonificacao() {

        if (this.tipo == 0) { // Funcionario Comum
            return this.salario * 0.1;
        } else if (this.tipo == 1) { // Gerente
            return this.salario * 0.2;
        } else { // Diretor
            return 1000;
        }
    }

Assim, caso seja um funcionário comum, a bonificação será 10% do salário, caso seja um gerente, 20% do sálario e por fim, caso seja um diretor, a bonificação será no valor de 1000.

Fico à disposição em caso de dúvidas.

Um grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

no print( vc está somando sua bonificação com o salário). -Bonificação do diretor salario 4k + 1k = 5 + 4k salário = 9k