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

Modificadores de Acesso - getData() retornando 0/0/0

Boa noite Galera! Estou com um problema na hora de retornar a data no meu programa. Tentei ler o fórum e segui algumas ideias, porém não consegui preencher o campo da data.

Segue o código

Classe Funcionário:

public class Funcionario {
    private String nome;
    private String departamento;
    private double salario;
    private String rg;
    private Data dataEntrada;

    public void recebeAumento(double valor){
        this.salario += valor;
    }
    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("Salario é: " +this.salario);
        System.out.println("Data de entrada: " + this.dataEntrada.getFormatada());
        System.out.println("RG:" +this.rg);
        System.out.println("Ganho Anual:" +this.getGanhoAnual());
    }

    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 double getSalario() {
        return this.salario;
    }

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

    public Data getDataEntrada() {
        return this.dataEntrada;
    }

    public void setDataEntrada (Data dataEntrada) {
        this.dataEntrada = dataEntrada;
    }

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

Classe Data

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

  public Data setClassData (int dia, int mes, int ano) {
        Data dataPreenchida = new Data ();
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
        return dataPreenchida;
    }

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

E por ultimo a main


    public static void main(String[] args) {

        Funcionario f1 = new Funcionario();
        f1.setNome(" João");
        f1.setSalario(100);
        f1.recebeAumento(50);
        f1.setDataEntrada(new Data().setClassData(01,10,2017));

        f1.mostra();
    }
2 respostas

Qual o erro de compilação?

solução!

Então,

O problema está no método setClassData, observe:

public Data setClassData (int dia, int mes, int ano) {
        Data dataPreenchida = new Data ();
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
        return dataPreenchida;
    }

Você está setando o dia, mês e ano. Ok, mas você devolte uma nova instâcia de uma classe que você não alterou campo algum! por isso ela está zerada. O ideal é você retornar this, ou seja, a instância da classe que você está modificando.

Ficaria assim:

public Data setClassData (int dia, int mes, int ano) {
        //Data dataPreenchida = new Data ();
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
        return this; //retorna a instância atual!
    }

Qualquer dúvida tamo aí!