What's wrong with my code?

-3

I want to create an employee class with the following specifications, but I can not return the show data method and the salary calculation method. It gives compilation errors when calling the methods, I wanted to know how I can define their call, because something is wrong. Thank you in advance.

  

The employee should have:

     
  • Name, age, hourly wage and hours worked in the month.
  •   
  • Class attributes must be encapsulated.
  •   
  • There should be getters methods for all and setters for hourly and hourly hours worked in the month.
  •   
  • There is a rule that the hourly wage must be between 10 and 200.
  •   
  • There is a rule that hours worked in the month can not exceed 160 hours.
  •   
  • method mostrarDados() is used to display all employee information in the console.
  •   
  • method calcularSalario() returns the value of the employee's salary. This amount is obtained by multiplying the employee's hourly wage and hours worked in the month.
  •   

Class Funcionario :

public class Funcionario {

      private String        nome;
      private int          idade;
      private int   salario_Hora;
      private int horas_trab_mes;


    public double getSalario_Hora() {
        return salario_Hora;
    }
    public void setSalario_Hora(double salario_Hora) {
        if (salario_Hora>10 & salario_Hora<=200){
            this.salario_Hora = salario_Hora;
        }

    }
    public double getHoras_trab_mes() {
        if (horas_trab_mes<=160){
            return horas_trab_mes;  
        }

    }
    public void setHoras_trab_mes(double horas_trab_mes) {
        this.horas_trab_mes = horas_trab_mes;
    }
    public String getNome() {
        return nome;
    }
    public int getIdade() {
        return idade;
    }

    public void mostrarDados(){
        System.out.println("O nome do funcionário é"+getNome());
        System.out.println("A idade do funcionário é"+getIdade);
        System.out.println("O número de horas trabalhadas do funcionário é "+horas_trab_mes);
        System.out.println("O salário por hora do funcionário é"+salario_Hora);
        }

    private double calcularSalario(){
        return salario_Hora*horas_trab_mes;
    }


}

Class Aplicacao :

public class Aplicacao {

    public static void main(String[] args) {

        Funcionario f= new Funcionario();
        f.setHoras_trab_mes(100);
        f.setSalario_Hora(100);

        System.out.println("Os dados do funcionário são:"+ f.mostrarDados();
        System.out.println("O salário do funcionário é:"+ f.calcularSalario();

        }
    }
}

When trying to compile, I get the following errors:

C:\Projetos\Funcionario\src\Aplicacao.java:9: error: ')' expected
        System.out.println("Os dados do funcionário são:"+ f.mostrarDados();
C:\Projetos\Funcionario\src\Aplicacao.java:10: error: ')' expected
        System.out.println("O salário do funcionário é:"+ f.calcularSalario();
C:\Projetos\Funcionario\src\Aplicacao.java:14: error: class, interface, or enum expected
}
3 errors
C:\Projetos\Funcionario\src\Funcionario.java:14: error: incompatible types: possible lossy conversion from double to int
            this.salario_Hora = salario_Hora;
C:\Projetos\Funcionario\src\Funcionario.java:25: error: incompatible types: possible lossy conversion from double to int
        this.horas_trab_mes = horas_trab_mes;
C:\Projetos\Funcionario\src\Funcionario.java:36: error: cannot find symbol
        System.out.println("A idade do funcionário é"+getIdade);
  symbol:   variable getIdade
  location: class Funcionario
3 errors
    
asked by anonymous 26.08.2016 / 14:43

2 answers

3

I put the description of the most obvious compilation errors in comments:

public class Aplicacao {

    public static void main(String[] args) {

        Funcionario f= new Funcionario();
        f.setHoras_trab_mes(100);
        f.setSalario_Hora(100);

        // Faltou um fecha parênteses.    
        System.out.println("Os dados do funcionário são:"+ f.mostrarDados();

        // Faltou um fecha parênteses.
        System.out.println("O salário do funcionário é:"+ f.calcularSalario();

        // Você está abrindo duas chaves e fechando três.
        }
    }
}
public class Funcionario {

      private String        nome;
      private int          idade;
      private int   salario_Hora;
      private int horas_trab_mes;


    public double getSalario_Hora() {
        return salario_Hora;
    }
    public void setSalario_Hora(double salario_Hora) {
        if (salario_Hora>10 & salario_Hora<=200){
            // O atributo salario_Hora é int, enquanto que você está tentando
            // atribuir-lhe um double. A linguagem java não permite isso diretamente
            // sem um cast porque iria perder precisão. Afinal como você colocaria
            // um número fracionário em algo que só aceita inteiros sem fazer
            // nenhuma conversão, adaptação ou arredondamento?
            this.salario_Hora = salario_Hora;
        }

    }
    public double getHoras_trab_mes() {
        if (horas_trab_mes<=160){
            return horas_trab_mes;  
        }

    }
    public void setHoras_trab_mes(double horas_trab_mes) {
        // Novamente, tentando colocar double no int.
        this.horas_trab_mes = horas_trab_mes;
    }
    public String getNome() {
        return nome;
    }
    public int getIdade() {
        return idade;
    }

    public void mostrarDados(){
        System.out.println("O nome do funcionário é"+getNome());

        // getIdade é um método, então faltou os parênteses.
        System.out.println("A idade do funcionário é"+getIdade);
        System.out.println("O número de horas trabalhadas do funcionário é "+horas_trab_mes);
        System.out.println("O salário por hora do funcionário é"+salario_Hora);
        }

    private double calcularSalario(){
        // Aqui você havia esquecido o ponto-e-vírgula,
        // mas você já editou isso na pergunta.
        return salario_Hora*horas_trab_mes;
    }


}

Most of these compilation errors are simple to solve, so I'll leave it to you. As for the problem of putting double in int , you only have to decide once and for all whether the attribute is double or int and make the setter parameters and getter return value to reflect your choice .

Finally, there are still other issues with coding style. Naming conventions dictate that method names, attributes, and locale variables must be composed of concatenated words with no spaces, the first letter of each word being lowercase and all other lowercase letters, except for the first letter that must always be small. Therefore, these identifiers have a good nomenclature:

  • nome
  • idade
  • getNome
  • getIdade
  • calcularSalario

These already have a bad nomenclature:

  • salario_Hora : Should be salarioHora
  • horas_trab_mes : Should be horasTrabalhadasMes - Do not abbreviate words if you do not have a great reason for it.
  • getSalario_Hora : Should be getSalarioHora
  • setSalario_Hora : Should be setSalarioHora
  • getHoras_trab_mes : Should be getHorasTrabalhadasMes
  • setHoras_trab_mes : Should be setHorasTrabalhadasMes

Once this is done, there will still be some more complicated compilation errors, here they go:

    public double getHoras_trab_mes() {
        if (horas_trab_mes<=160){
            return horas_trab_mes;  
        }

    }

If the number of hours worked is less than or equal to 160, it will be returned. But what if it is not? The answer is that this method is wrong and it should return the independent value of anything, if is unnecessary.

The mostrarDados method is void . That is, it produces no result. It's even showing the output via System.out.println instead of returning some value. This behavior is incompatible with what is in your Aplicacao class:

    System.out.println("Os dados do funcionário são:"+ f.mostrarDados();

Instead, just call mostrarDados() directly and he himself will take care of the task of displaying the data:

    f.mostrarDados();

And if you already have a method for displaying the data, then you do not need to do this later:

    System.out.println("O salário do funcionário é:"+ f.calcularSalario();

After all, if you have a method for displaying the data on the console, it makes more sense to put it in there.

With this, only these two rules are missing:

  
  • There is a rule that the hourly wage must be between 10 and 200.
  •   
  • There is a rule that hours worked in the month can not exceed 160 hours.
  •   

And you're on the right path, the ideal is to do this within the setters. When these restrictions are satisfied, it is easy, just set the value of the fields and that's it. When they are not satisfied, you can do three possible paths:

  • Do nothing - which is what you are doing right now.
  • Write something in System.out.println saying that the method refused to set the value.
  • Throw an exception - which is the appropriate treatment for robust systems, but you're at a level that is too new to handle this case, since exception handling is something that is significantly more advanced than that you are in the moment.

I hope I have helped you.

    
26.08.2016 / 16:10
0
System.out.println("Os dados do funcionário são:"+ f.mostrarDados());
System.out.println("O salário do funcionário é:"+ f.calcularSalario());

At a glance, there are many incomplete calls; missing check then ...

    
26.08.2016 / 15:01