4
respostas

esse é meu código na hora de imprimir a Data ela sai completamente errada

class funcionario {


    String nome, rg, setor;
    double salario;
    Data dataDeEntrada;
   double SalarioAnual (){
   return this.salario * 12;
   }

    void RecebeAumento (double valor) {

        this.salario += valor;

}

    void Imprime (){
        System.out.println("\nNome do Funcionário: "+this.nome);
        System.out.println("Data de Entrada: "+this.dataDeEntrada);
        System.out.println("RG: "+this.rg);
        System.out.println("Departamento: "+this.setor);
        System.out.println("Salario do Funcionário = "+this.salario);
        System.out.println("Salário Anual "+this.SalarioAnual());
    }

    }


class Data {

   int dia, mes, ano;

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

   }
}

public class CadastroFuncionario {
    public static void main(String[] args) {

       //FUNCIONARIO 1
    funcionario mayara = new funcionario ();
    mayara.nome = "Mayara Talita";
    mayara.rg = "405.784.680-69";
    mayara.setor = "Massagem";
    mayara.dataDeEntrada = new Data();
    mayara.dataDeEntrada.mostrarData(1,7,2000);

    mayara.salario = 15000;

    mayara.RecebeAumento (500);

    mayara.Imprime();

    //FUNCIONARIO 2
    funcionario alexandre = new funcionario();
    alexandre.nome = "Alexandre Vinicius";
    alexandre.rg = "405.545.410-970";
    alexandre.setor = "Desenvolvedor";
    alexandre.dataDeEntrada = new Data();
    alexandre.dataDeEntrada.mostrarData(11,8,1996);
    alexandre.salario = 45500;

    alexandre.RecebeAumento(5000);

    alexandre.Imprime();




    }
}

SAIDA DATA

Data de Entrada: Java_Orientado_Objeto.newpackage.Data@6d06d69c

4 respostas

Oi Alexandre, tudo bem ?

Lembra que quando a gente pede para imprimir um objeto, o que ele vai fazer por trás dos panos é chamar o toString(), que quando não está implementado vai imprimir a referência de memória que o objeto está alocado.

Acredito que você precisa implementar o toString() para que saia conforme você deseja.

Abraços

Opções:

  1. Criando um toString
class Data {

   int dia, mes, ano;

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

   String toString(){
         return this.dia+"/"+this.mes+"/"+this.ano;
  }
}

Opção 2:

mostra data não me parece um nome interessante para um método que voce quer adicionar uma data.

Sugestões:

  • trocar o nome do método mostraData por adicionaData.
  • colocar um retorno String no método mostraData e montar a String como no código a seguir. (a)
  • Para Imprimir voce vai ter que alterar o método imprime (b)

(a)

class Data {
   int dia, mes, ano;

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

   String mostraData(){
       return this.dia+"/"+this.mes+"/"+this.ano;
   }

}

(b)

    void Imprime (){
        System.out.println("\nNome do Funcionário: "+this.nome);
        System.out.println("Data de Entrada: "+this.dataDeEntrada.mostraData());
        System.out.println("RG: "+this.rg);
        System.out.println("Departamento: "+this.setor);
        System.out.println("Salario do Funcionário = "+this.salario);
        System.out.println("Salário Anual "+this.SalarioAnual());
    }

Fala Alexandre! Cara, nesse exercício resolvi da seguinte forma(resumido):

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

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

class Funcionario{
    String nome;
    String rg;
    Data dataEntrada;

    void mostra (){
        System.out.println("Nome: " + this.nome);
        System.out.println("Data: " + this.dataEntrada.dia + "/" + this.dataEntrada.mes + "/" + this.dataEntrada.ano);
    }
}

class TestaFuncionario{
    public static void main(String[] args){

        Funcionario f1 = new Funcionario();
        f1.nome = "Fabio";

        f1.dataEntrada = new Data();
        f1.dataEntrada.preenche(25, 5, 1993);

        f1.mostra();

    }
}

Oi Alexandre, as duas soluções resolverão o seu problemas, mas acredito que para você a segunda opção, a proposta pelo Fábio seria a mais indicada, pois nessa parte do curso, creio que você ainda não foi apresentado ao método toString, e nem à annotation @Override, coisas que serão explicadas melhor no decorrer do curso.