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