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

Começando com Orientação a objetos Exercício 6

Por que a data não esta sendo lista formatata: System.out.println("dataEntrada : " + this.dataEntrada);

dataEntrada : DataFuncionario@15db9742

class DataFuncionario {                                                                                                                           
       int diaDataFuncionario;
       int mesDataFuncionario;
       int anoDataFuncionario;

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

// isto é um objeto                                                                                                                     
class Funcionario {                                                                                                                           
    int    idFuncionario;                                                                                                                         
    String departamento;
//  String dataEntrada;
    DataFuncionario   dataEntrada; //DataFuncionario vem da classe DataFuncionario
    double salario;                                                                                                                       

    DadosFuncionario nome = new DadosFuncionario();
    DadosFuncionario cpf  = new DadosFuncionario();
    DadosFuncionario rg   = new DadosFuncionario();

    Endereco         rua    = new Endereco();   
    Endereco         bairro = new Endereco();
    Endereco         cidade = new Endereco();
    Endereco         estado = new Endereco();
    Endereco         cep    = new Endereco();   

   // método recebe aumento
   void recebeAumento(double valorAumento) {                                                                                                   
        this.salario += valorAumento; 
    };  

   //método calcula ganho anual
   // este metodo não pode ser void porque precisa retornar parametro.    
   double calculaGanhoAnual() {
          double salarioAnual = this.salario * 12;
          return salarioAnual;   
    };

    void mostra() {
         System.out.println("idFuncionario: "  + this.idFuncionario);                         
         System.out.println("departamento : "  + this.departamento);                        
         System.out.println("dataEntrada  : "  + this.dataEntrada);                        
         System.out.println("salario      : "  + this.salario);                        

         System.out.println("nome         : "  + this.nome);
         System.out.println("cpf          : "  + this.cpf);
         System.out.println("rg           : "  + this.rg);

         System.out.println("rua          : "  + this.rua);
         System.out.println("bairro       : "  + this.bairro);
         System.out.println("cidade       : "  + this.cidade);
         System.out.println("estado       : "  + this.estado);
         System.out.println("cep          : "  + this.cep);

         System.out.println("salario atual: " + this.salario);          
         System.out.println("ganho anual:   " + this.calculaGanhoAnual());

         System.out.println("Dia: " + this.dataEntrada.diaDataFuncionario);
         System.out.println("Mês: " + this.dataEntrada.mesDataFuncionario);
         System.out.println("Ano: " + this.dataEntrada.anoDataFuncionario);
    };          
}; 

class AtualizaFuncionario {

    public static void main(String[] args) {
        Funcionario f1 = new Funcionario();
        Funcionario f2 = new Funcionario();
        //Funcionario f2 = f1;
        f1.idFuncionario = 0001; // atributo da classe funcionario
        f1.departamento  = "Informatica"; 

//      f1.dataEntrada   = "20/12/2016";  
        f1.dataEntrada   = new DataFuncionario();
        f1.dataEntrada.preencheData(20, 12, 2016);

        f1.salario       = 1000;      
        f1.recebeAumento(500); //metodo da classe Funcionario

        f1.nome.nomeFuncionario = "Joao das Coves";  // attributos da Classe DadosFuncionario
        f1.cpf.cpfFuncionario   = "001.002.003.004-05"; 
        f1.rg.rgFuncionario     = "7.123.256";  

        f1.rua.ruaEndereco       = "Rua do Sobe e Desce"; //Attributos  da classe Endereco
        f1.bairro.bairroEndereco = "Nuinca Aoparece";
        f1.cidade.cidadeEndereco = "Claraval";
        f1.estado.estadoEndereco = "MG";
        f1.cep.cepEndereco       = "123456000";   

        f2.idFuncionario = 0002; // atributo da classe funcionario
        f2.departamento  = "Informatica 2"; 
//      f2.dataEntrada   = "20/11/2016"; 
        f2.dataEntrada   = new DataFuncionario();
        f2.dataEntrada.preencheData(20, 11, 2016);        


        f2.salario       = 2000;      
        f2.recebeAumento(600); //metodo da classe Funcionario

        f2.nome.nomeFuncionario = "Luis das Coves";  // attributos da Classe DadosFuncionario
        f2.cpf.cpfFuncionario   = "006.007.008.009-10"; 
        f2.rg.rgFuncionario     = "8.123.256";  

        f2.rua.ruaEndereco       = "Rua do Sobe e Desce 2"; //Attributos  da classe Endereco
        f2.bairro.bairroEndereco = "Nuinca Aoparece 2";
        f2.cidade.cidadeEndereco = "Claraval 2";
        f2.estado.estadoEndereco = "MG";
        f2.cep.cepEndereco       = "123456000";   

//      if (f1 == f2) {
//          System.out.println("iguais");
//      } else {
//          System.out.println("diferentes");        
//      } 
//       
//      System.out.println("salario atual:" + f1.salario);
//      System.out.println("ganho anual:" + f1.calculaGanhoAnual());
        f1.mostra();
        f2.mostra();
    }    
}
4 respostas

System.out.println("dataEntrada : " + this.dataEntrada); // -> aqui você esta impimindo o endereço da variável dataEntrada;

Para a classe DataFuncionario crie uma função que retorne a data formatada

exemplo:

String getDataFormatada() { return this.diaDataFuncionario + "/" + this.mesDataFuncionario + "/" + this.anoDataFuncionario; }

Na classe Funcionario no método void mostra(), substituir a linha

System.out.println("dataEntrada : " + this.dataEntrada);

por

System.out.println("dataEntrada : " + this.dataEntrada.getDataFormatada());

Olá Luis! Quando você faz this.dataEntrada você não está acessando a data e sim o endereço de memória onde este objeto está. Lembre-se, em Java, uma variável nunca carrega um objeto, e sim uma referência para ele. É isso que significa o que apareceu para você: DataFuncionario@15db9742. Este é o endereço de memória onde o objeto criado está alocado.

Para acessar a data você deve fazer o que fez no método mostra() da classe Funcionario:

void mostra(){
    // trecho de código omitido
    System.out.println("Dia: " + this.dataEntrada.diaDataFuncionario);
    System.out.println("Mês: " + this.dataEntrada.mesDataFuncionario);
    System.out.println("Ano: " + this.dataEntrada.anoDataFuncionario);
}

Mas aí, você acessa o dia, o mês e o ano separados. Quer todos juntos, em um formato mais apropriado como esse: 22/12/2016? Então, é preciso criar um método para fazer essa junção. E nada mais apropriado que este método seja da própria classe DataFuncionario. Poderia ser um método assim:

String mostraData(){
        return this.diaDataFuncionario + "/" + this.mesDataFuncionario + "/" + this.anoDataFuncionario;
}

Você está apenas colocando os atributos da classe DataFuncionario. em um formato mais apresentável.

Aí, quando chamar esta data deve invocar o método criado. Assim:

System.out.println("dataEntrada : " + this.dataEntrada.mostraData());

A saída será o que pretende:

dataEntrada : 22/12/2016

Abraços e sucesso nos estudos!

Muito bom, minha duvida foi esclarecida

solução!

Olá Luis! Sua dúvida foi solucionada? Se sim, marca o tópico como solucionado, assim você ajuda outros colegas com a mesma dúvida.

Abraços!