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

Data retornando errado

Pessoal, boa tarde.

Estou fazendo os exercícios da aula sobre modificadores de acesso, e apesar de muitos erros no início, consegui corrigir todos sem maiores problemas, exceto um: a data retorna zerada (0/0/0).

Abaixo, seguem as classes para análise:

class Funcionario {

    private String nome;
    private String departamento;
    private String rg;
    private double salario;
    private Data dataDeEntrada;

    // Início getters e setters de atributos
    public String getNome() {
        return this.nome;
    }

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

    public String getDepartamento() {
        return this.departamento;
    }

    public void setDepartamento(String departamento) {
        this.departamento = departamento;
    }

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

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

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

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

    public Data getDataDeEntrada() {
        return this.dataDeEntrada;
    }

    public void setDataDeEntrada(int dia, int mes, int ano) {
        this.dataDeEntrada = new Data();
        this.dataDeEntrada.getFormatada();
    }
    // Fim getters e setters de atributos


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


    public double getGanhoAnual() {
        return this.salario * 12;
    }    


    public void mostra() {
        System.out.println("Nome: " + this.nome);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Data de admissao: " + this.dataDeEntrada.getFormatada());
        System.out.println("RG: " + this.rg);
        System.out.println("Salário: " + this.salario);
        System.out.println();
        System.out.println("Ganho anual: " + this.getGanhoAnual());
    }
}
class Data {

    private int    dia;
    private int mes;
    private int ano;

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

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

    public static void main(String[] args) {

        Funcionario f = new Funcionario();

        f.setNome("Jean");
        f.setDepartamento("T.I.");
        f.setRg("MG-12.345.678");
        f.setSalario(800.0);
        f.setDataDeEntrada(11, 12, 2013); 

        f.mostra();        
    }
}
9 respostas

Jean, boa tarde!

Não fiz esse curso, mas analisando o código, vi que você está pegando a data getFormatada, mas em nenhum momento você está chamando qualquer função de define a data.

Adriano, no caso não o método setDataDeEntrada() não seria essa função?

Está declarado na classe Funcionário, e pega as informações da classe Data.

Mas mesmo assim, está zerando.

Sim verdade, não tinha visto.

Mas uma coisa, nesta função setDataDeEntrada, os parâmetros não estão sento utilizados.

É passado o dia, mês e ano, mas não são atribuídos a nada.

solução!

apenas sete como você colocou o preenche data. pois você cria a nova data mas não repassa para "dia" "mês" e "ano" os valores que você colocou.

ou seja, chama a função "this.dataDeEntrada.preencheData(dia,mes,ano);" depois da declaração, como abaixo:

 public void setDataDeEntrada(int dia, int mes, int ano) {
        this.dataDeEntrada = new Data();
        this.dataDeEntrada.preencheData(dia,mes,ano);
        this.dataDeEntrada.getFormatada();
    }

Boa tarde,

É só fazer o método setDataDeEntrada chamar o construtor correto da classe Data, que precisa ser conforme abaixo:

public void setDataDeEntrada(int dia, int mes, int ano) {
    this.dataDeEntrada = new Data(dia, mes, ano);
    this.dataDeEntrada.getFormatada();
}

Abraço.

Jefferson, muito obrigado!!

Deu certo aqui a sua solução!

Emerson, tentei da forma que você disse também, e o retorno foi este:

Funcionarios.java:47: error: constructor Data in class Data cannot be applied to given types;
                this.dataDeEntrada = new Data(dia, mes, ano);
                                     ^
  required: no arguments
  found: int,int,int
  reason: actual and formal argument lists differ in length
1 error

Veja como estava o método:

public void setDataDeEntrada(int dia, int mes, int ano) {
        this.dataDeEntrada = new Data(dia, mes, ano);
        this.dataDeEntrada.getFormatada();
    }

Teria que existir o construtor com os parâmetros na classe Data, e não precisaria mais do método preencheData, assim:

public Data (int dia, int mes, int ano) {
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

Emerson, testei dessa forma e agora funcionou.

No caso, como o professor não falou de construtor ainda, eu não havia cogitado colocar dessa forma, meu colega de trabalho também me falou disso, mas preferi seguir o passo-a-passo da aula.

Mas obrigado pelas respostas de todos!