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

Get e Set de Data

Então pessoal, não estou conseguindo criar o get e o set da data corretamente, segue as classes que estou utilizando:

public class Principal {

    public static void main(String[] args) {



       Empresa empresa = new Empresa();
       empresa.empregados = new Funcionario[2];
       Data data_entrada = new Data();


        Funcionario f = new Funcionario();
        f.setSalario(1000);
        f.setNome("Gabriel");
        f.setRg("123344566");
        f.setDept("rh");
        data_entrada.preencheData(14, 4, 1999);
        f.setData(data_entrada);
        empresa.adiciona(f);

        Funcionario f2 = new Funcionario();
        f2.setSalario(1100);
        f2.setNome("Melo");
        f2.setRg("111111111");
        f2.setDept("rh");
        data_entrada.preencheData(14, 5, 1998);
        f2.setData(data_entrada);
        empresa.adiciona(f2);

      empresa.mostraEmpregados();

    }
}
public class Funcionario {

    private String nome;
    private String dept;
    private double sal;
    private Data data_entrada = new Data();
    private String rg;

    void recebeAumento(double val_aumento){
        this.sal += val_aumento;
    }

    double calculaGanhoAnual(){
        return this.sal*12;
    }

    void mostra(){
        System.out.println("Nome: " + this.nome);
        System.out.println("Dept: " + this.dept);
        System.out.println("Salario: " + this.sal);
        System.out.println("Data de entrada: " + this.getData().getFormatada());
        System.out.println("RG: " + this.rg);
        System.out.println("Ganho anual: R$" + this.calculaGanhoAnual());
        System.out.println("-------------");
    }

    public double getSalario(){
        return this.sal;
    }

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

    public String getNome(){
        return this.nome;
    }

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

    public String getDept(){
        return this.dept;
    }

    public void setDept(String depart){
        this.dept = depart;
    }

    public String getRg(){
        return this.rg;
    }

    public void setRg(String Rg){
        this.rg = Rg;
    }

    public Data getData(){
        return data_entrada;
    }

    public void setData(Data d){
        this.data_entrada = d;
    }

}
public class Data {
    int dia;
    int mes;
    int ano;



     void preencheData (int dia, int mes, int ano) {
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

     String getFormatada(){

         String formata = this.dia + "/" + this.mes + "/" + this.ano;

         return formata;
     }
}
public class Empresa {

    String nome;
    String cpf;
    int livre = 0;
    Funcionario[] empregados;


    void adiciona(Funcionario f) {
        this.empregados[this.livre] = f;
        this.livre++;
    }


    void mostraEmpregados() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição: " + (i+1));
            this.empregados[i].mostra();


        }
    }


    boolean contem(Funcionario f){

        for(int i = 0; i < this.livre; i++){
            if(f == this.empregados[i]){
                return true;
            } 
        }
        return false;
    }


}

Essa é minha saída quando executo:

run:
Funcionário na posição: 1
Nome: Gabriel
Dept: rh
Salario: 1000.0
Data de entrada: 14/5/1998
RG: 123344566
Ganho anual: R$12000.0
-------------
Funcionário na posição: 2
Nome: Melo
Dept: rh
Salario: 1100.0
Data de entrada: 14/5/1998
RG: 111111111
Ganho anual: R$13200.0
-------------
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Como vcs podem ver, as datas estão iguais! Não sei o que pode estar acontecendo. Agradeço qualquer ajuda!

2 respostas
solução!

Boa noite Gabriel. Pelo que pude ver, você instanciou apenas uma data:

Data data_entrada = new Data();

Ao criar o primeiro funcionário, você preencheu a data através do método preencheData, e atribuiu a data ao funcionário.

Ao criar o segundo funcionário, você preencheu novamente o mesmo objeto data e atrelou o mesmo objeto ao segundo funcionário.

Logo, ambos os funcionários referenciam o mesmo objeto data.

Insira o código abaixo em seu programa e veja o resultado:

System.out.println(f.getData());
System.out.println(f2.getData());
System.out.println(f.getData() == f2.getData());

Como o construtor de Funcionário já cria um objeto Data, você poderia fazer o seguinte:

f.getData().preencheData(14, 4, 1999);
f2.getData().preencheData(14, 5, 1998).

Muitíssimo obrigado!!!