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

função não calcula

Fiz um código que mostra o salário atual e deveria mostrar mostrar o saldo acrescido de 10%, porém não consegui identificar onde está a falha

Segue código:

public class Empregado
{
    private String nome, sobrenome;
    public double salarioMensal;

    public Empregado( String name, String sobreNome, double salMensal )
    {
        nome = name;
        sobrenome = sobreNome;
        salarioMensal = salMensal;
    }

    public void setnome( String name )
    {
        nome = name;
    }

    public String getnome()
    {
        return nome;
    }

    public void setsobrenome( String sobreNome )
    {
        sobrenome = sobreNome;
    }

    public String getsobreNome()
    {
        return sobrenome;
    }

    public void setSalarioMensal(double salMensal)
    {
        if (salarioMensal < 0.0)
        {
            salarioMensal = 0.0;
        }

        if (salarioMensal > 0.0)
        {
            salarioMensal = salarioMensal;
        }

    }

    public double getsalarioMensal()
    {
        return salarioMensal;
    }
}
public class EmpregadoTeste
{
    public static void main( String[] args )
    {
        Empregado empregado1 = new Empregado("Fabio", "Perez", 1500.00);
        Empregado empregado2 = new Empregado("Igor", "Silva", 1500.00);

        System.out.printf( "Nome: %s Sobrenome: %s\nSalario: %.2f\n",
         empregado1.getnome(), empregado1.getsobreNome(), empregado1.getsalarioMensal() );
        System.out.printf( "\nNome: %s Sobrenome: %s\nSalario: %.2f\n",
         empregado2.getnome(), empregado2.getsobreNome(), empregado2.getsalarioMensal() );

        empregado1.setSalarioMensal(empregado1.salarioMensal * 1.1);
        empregado2.setSalarioMensal(empregado1.salarioMensal * 1.1);

        System.out.printf("\nNome: %s\nSalario Anual: %.2f\n", empregado1.getnome(),
                empregado1.getsalarioMensal()*12);
        System.out.printf("\nNome: %s\nSalario Anual: %.2f\n", empregado2.getnome(),
                empregado2.getsalarioMensal()*12);


    }
}
4 respostas
solução!

Boa noite Fabio,

Existe um erro no seu método setSalarioMensal, você não está usando o parâmetro de entrada.

public void setSalarioMensal(double salMensal)
    {
        if (salarioMensal < 0.0)
        {
            salarioMensal = 0.0;
        }

        if (salarioMensal > 0.0)
        {
            salarioMensal = salarioMensal;
        }

    }

A versão corrigida seria:

public void setSalarioMensal(double salMensal)
    {
        if (salarioMensal < 0.0)
        {
            salarioMensal = 0.0;
        }

        if (salarioMensal > 0.0)
        {
            salarioMensal = salMensal;
        }

    }

Além disso na classe TesteEmpregado, você está usando o salário do empregado1 duas vezes.

empregado1.setSalarioMensal(empregado1.salarioMensal * 1.1);
empregado2.setSalarioMensal(empregado1.salarioMensal * 1.1);

Abaixo segue o código completo corrigido:


public class Empregado
{
    private String nome, sobrenome;
    public double salarioMensal;

    public Empregado( String name, String sobreNome, double salMensal )
    {
        nome = name;
        sobrenome = sobreNome;
        salarioMensal = salMensal;
    }

    public void setnome( String name )
    {
        nome = name;
    }

    public String getnome()
    {
        return nome;
    }

    public void setsobrenome( String sobreNome )
    {
        sobrenome = sobreNome;
    }

    public String getsobreNome()
    {
        return sobrenome;
    }

    public void setSalarioMensal(double salMensal)
    {
        if (salarioMensal < 0.0)
        {
            salarioMensal = 0.0;
        }

        if (salarioMensal > 0.0)
        {
            salarioMensal = salMensal;
        }

    }

    public double getsalarioMensal()
    {
        return salarioMensal;
    }
}
public class EmpregadoTeste
{
    public static void main( String[] args )
    {
        Empregado empregado1 = new Empregado("Fabio", "Perez", 1500.00);
        Empregado empregado2 = new Empregado("Igor", "Silva", 1500.00);

        System.out.printf( "Nome: %s Sobrenome: %s\nSalario: %.2f\n",
         empregado1.getnome(), empregado1.getsobreNome(), empregado1.getsalarioMensal() );
        System.out.printf( "\nNome: %s Sobrenome: %s\nSalario: %.2f\n",
         empregado2.getnome(), empregado2.getsobreNome(), empregado2.getsalarioMensal() );

        empregado1.setSalarioMensal(empregado1.salarioMensal * 1.1);
        empregado2.setSalarioMensal(empregado2.salarioMensal * 1.1);

        System.out.printf("\nNome: %s\nSalario Anual: %.2f\n", empregado1.getnome(),
                empregado1.getsalarioMensal()*12);
        System.out.printf("\nNome: %s\nSalario Anual: %.2f\n", empregado2.getnome(),
                empregado2.getsalarioMensal()*12);


    }
}

Abraços

Obrigado pela ajuda!

Não tinha notado sobre o detalhe não estar utilizando o parâmetro de entrada.

Poderia tirar uma dúvida?

Neste caso, sempre deve dar um nome diferente do parâmetro de entrada com o nome da instância, não é isso?

Boa tarde Fabio,

O parâmetro de entrada pode ter o mesmo nome da propriedade da classe, mas aí você precisa usar a palavra chave this para especificar onde está usando a propriedade da classe e onde está usando o parâmetro de entrada, assim:

public void setSalarioMensal(double salarioMensal)
    {
        if (salarioMensal < 0.0)
        {
            this.salarioMensal = 0.0;
        }

        if (salarioMensal > 0.0)
        {
            this.salarioMensal = salarioMensal;
        }

    }

Entendi.

Muito obrigado

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software