[RESOLVIDO] Porque as funções de calcular inss e ir estão retornando 0?

public class Funcionario

{
private double horasTrabalhadas;
private double salarioHora;
private int dependentes;

public Funcionario(double horasTrabalhadas, double salarioHora, int dependentes){
    this.horasTrabalhadas = horasTrabalhadas;
    this.salarioHora = salarioHora;
    this.dependentes = dependentes;
}

public double getHorasTrabalhadas(){
    return horasTrabalhadas;
}

public void setHorasTrabalhadas(double horasTrabalhadas){
    this.horasTrabalhadas = horasTrabalhadas;
}

public double getSalarioHora(){
    return salarioHora;
}

public void setSalarioHora(double salarioHora){
    this.salarioHora = salarioHora;
}

public int getDependentes(){
    return dependentes;
}

public void setDependentes(int dependetes){
    this.dependentes = dependentes;
}

public double calcularSalarioBruto(){
    return horasTrabalhadas * salarioHora +
    (50 * dependentes);
}

public double calcularDescontoINSS(){
    double salarioBruto = calcularSalarioBruto();
    if(salarioBruto <= 1000){
        return salarioBruto * (8.5/100);
    }else{
        return salarioBruto * (9/100);
    }
}

public double calcularDescontoIR(){
    double salarioBruto = calcularSalarioBruto();
    if(salarioBruto <= 500){
        return 0;
    }else if(salarioBruto <= 1000){
        return salarioBruto * (5/100);
    }else{
        return salarioBruto * (7/100);
    }
}

public double calcularSalarioLiquido(){
    double salarioBruto = calcularSalarioBruto();
    double inss = calcularDescontoINSS();
    double ir = calcularDescontoIR();
    return salarioBruto - inss - ir;
}

}

Se você não atribuir valores para horasTrabalhadas, salarioHora e dependentes o retorno será 0, pois por padrão, quando não é atriuído algum valor para atributos de classe do tipo double e também int, é 0.

Então ficaria:

public double calcularDescontoINSS(){
    double salarioBruto = calcularSalarioBruto();
    if(salarioBruto <= 1000){
        //           0
        return salarioBruto * (8.5/100); // resultado = 0
    }else{
        return salarioBruto * (9/100);
    }
}

public double calcularSalarioBruto(){
    //             0        *      0
    return horasTrabalhadas * salarioHora +
  // 50 *    0
    (50 * dependentes); // resultado = 0
}

Acho que não é esse o problema, pois o salario bruto esta calculando corretamente

No salário bruto ficaria:

0 * 0 + (50 * 0) = 0

Poste o código que você instancia a classe Funcionario.

import java.util.Scanner;

import java.text.DecimalFormat;

public class Problema
{
public static void main(String args[]){
Scanner teclado = new Scanner(System.in);

    System.out.println("Informe a quantidade de horas trabalhadas: ");
    double horasTrabalhadas = teclado.nextDouble();
    
    System.out.println("Informe o salário/hora: ");
    double salarioHora = teclado.nextDouble();
    
    System.out.println("Informe o número de dependentes: ");
    int dependentes = teclado.nextInt();
    
    Funcionario f1 = new Funcionario(horasTrabalhadas, salarioHora, dependentes);
    
    System.out.println("Salário Liquido = " + f1.calcularSalarioLiquido());
}

}

Passando os valores corretos funciona.
Fiz um teste:

Informe a quantidade de horas trabalhadas: 
40
Informe o salário/hora: 
140
Informe o número de dependentes: 
2
Salário Liquido = 5700.0

mas tenta calcular somente os descontos. Os metodos estão retornando zero caso eu passe 40,50,0 como parametros

Tem um erro nesse método:

    public void setDependentes(int dependetes) {
		this.dependentes = dependentes;
	}

O parâmetro está dependetes

mas ainda não é isso. Que estranho

return salarioBruto * (9/100);
Troca por
return salarioBruto * (9.0/100);

(9/100) retorna um int que será 0 e você precisa de um double 0.09.
Você está dividindo um inteiro por outro inteiro. Um dos dois precisa ser double.
9/100.0 ou 9.0/100

Em calcularDescontoIR também.

2 curtidas

Podia também tirar os parênteses. Muito obrigado!

1 curtida