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

Minha data não mostra o resultado correto

Criei uma classe Data para guardar as informações de entrada dos funcionários do meu programa e fiz um método para preencher mais facilmente essa data.

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;
    }
}

Então, no programa chamei uma nova data e preenchi as informações nela para ficar salvo em meus funcionarios:

class MostrarFuncionario {

    public static void main (String[] args) {

        Funcionario f1 = new Funcionario();

        f1.numero = 001;
        f1.nome = "Bruno Raposo";
        f1.departamento = "TI";
        f1.salario = 5000.0;

        f1.dataEntrada = new Data();
        f1.dataEntrada.preencheData(1, 2, 2018);


        f1.rg = "52800915-1";

        Funcionario f2 = new Funcionario();

        f2.numero = 002;
        f2.nome = "Thomas Nicolas";
        f2.departamento = "RH";
        f2.salario = 3000.0;

        f2.dataEntrada = new Data();
        f2.dataEntrada.preencheData(5, 3, 2018);


        f2.rg = "1234567891";

        Funcionario f3 = new Funcionario();

        f3.numero = 003;
        f3.nome = "Rogério Cidão";
        f3.departamento = "Administração";
        f3.salario = 2500.0;

        f3.dataEntrada = new Data();
        f3.dataEntrada.preencheData(8, 5, 2018);

        f3.rg = "0987654321";

        f3.recebeAumento(2000.0);
        f3.mudancaDepartamento("Banco de Dados");

        System.out.println("Salário atual: R$" + f1.salario);
        System.out.println("Salário anual: R$" + f1.calculaGanhoAtual());
        System.out.println("Seu departamento é: " + f1.departamento);

        f1.mostrar();

    }
}

Como você pode ver a cima, porém quando eu compilo e abro o programa, no lugar da data aparece essas informações:

Data de Entrada:Data@7cdbc5d3

Qual meu erro?

6 respostas

Oi Bruno, tudo bem ?

Acho que você esqueceu de sobreescrever o método toString

Onde?

class Funcionario {

    int numero;
    String nome;
    String departamento;
    double salario;
    Data dataEntrada;
    String rg;

    void recebeAumento(double valorASerAumentado) {
        this.salario += valorASerAumentado;
    }

    double calculaGanhoAtual() {

        return this.salario * 12;
    }

    void mudancaDepartamento(String novoDepartamento) {
        this.departamento = novoDepartamento;
    } 

    void mostrar() {
        System.out.println("Nome:" + this.numero);
        System.out.println("Departamento:" + this.departamento);
        System.out.println("Salário:" + this.salario);

        System.out.println("Data de Entrada: " + this.dataEntrada.getFormatada());

        System.out.println("RG:" + this.rg);
    }

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


    }
}

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;
    }
}

class MostrarFuncionario {

    public static void main (String[] args) {

        Funcionario f1 = new Funcionario();

        f1.numero = 001;
        f1.nome = "Bruno Raposo";
        f1.departamento = "TI";
        f1.salario = 5000.0;

        f1.dataEntrada = new Data();
        f1.dataEntrada.preencheData(1, 2, 2018);


        f1.rg = "52800915-1";

        Funcionario f2 = new Funcionario();

        f2.numero = 002;
        f2.nome = "Thomas Nicolas";
        f2.departamento = "RH";
        f2.salario = 3000.0;

        f2.dataEntrada = new Data();
        f2.dataEntrada.preencheData(5, 3, 2018);


        f2.rg = "1234567891";

        Funcionario f3 = new Funcionario();

        f3.numero = 003;
        f3.nome = "Rogério Cidão";
        f3.departamento = "Administração";
        f3.salario = 2500.0;

        f3.dataEntrada = new Data();
        f3.dataEntrada.preencheData(8, 5, 2018);

        f3.rg = "0987654321";

        f3.recebeAumento(2000.0);
        f3.mudancaDepartamento("Banco de Dados");

        System.out.println("Salário atual: R$" + f1.salario);
        System.out.println("Salário anual: R$" + f1.calculaGanhoAtual());
        System.out.println("Seu departamento é: " + f1.departamento);

        f1.mostrar();

    }
}

Meu código atual está assim, porém está dando os seguintes erros:

λ javac Funcionario.java Funcionario.java:28: error: cannot find symbol System.out.println("Data de Entrada: " + this.dataEntrada.getFormatada()); ^ symbol: method getFormatada() location: variable dataEntrada of type Data Funcionario.java:34: error: cannot find symbol return this.dia + "/" + this.mes + "/" + this.ano; ^ symbol: variable dia Funcionario.java:34: error: cannot find symbol return this.dia + "/" + this.mes + "/" + this.ano; ^ symbol: variable mes Funcionario.java:34: error: cannot find symbol return this.dia + "/" + this.mes + "/" + this.ano; ^ symbol: variable ano 4 errors

Para a classe Data

Olá Bruno,

para o seu problema, para a forma que está o seu código basta fazer as seguintes alterações. De:

System.out.println("Data de Entrada: " + this.dataEntrada.getFormatada());

Para

System.out.println("Data de Entrada: " + this.getFormatada());

Essa alteração é feita pois o método getFormatada pertence à classe Funcionario E a outra alteração é modificar o método getFormatada para:

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

Essa alteração é devido os atributos mes, dia e ano pertencerem à classe Data e não à classe Funcionário.

solução!

O que o Matheus falou, é você utilizar o método toString, creio que no Java I esse método ainda não foi apresentado, se foi, foi algo muito rápido, porém será explicado melhor mais para a frente no curso. Resumidamente e bem resumidamente, o toString é um método que toda classe contém, e você pode sobrescreve ele alterando o seu comportamento. O comportamento original dele imprime aquele código que você viu Data@7cdbc5d3, e para alterar é simples.

Na classe Data sobrescreva (@override) o toString da seguinte forma

    @Override
    public String toString() {
        return dia + "/" + mes + "/" + ano;
    }

A classe fica assim:

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;
    }

    @Override
    public String toString() {
        return dia + "/" + mes + "/" + ano;
    }
}

E para utilizar basta ir no getFormatada para

    Data getFormatada() {
        //return this.dataEntrada.dia + "/" + this.dataEntrada.mes + "/" + this.dataEntrada.ano;
        return dataEntrada;
    }

Mas isso será melhor explicado mais para a frente, acredito para para essa primeira parte o melhor seria a primeira abordagem.

Espero ter ajudado, e me desculpa se me intrometi no assunto. E Matheus, me corrija caso eu tenha falado algo errado ou incompleto.