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

Dúvida no Ex. 6 da Aula 3 - Começando com Orientação a objetos

quando eu dou print a data sai errada. segue meu codigo obg

class Data{

    int dia;
    int mes;
    int ano;
    void preencheData (){
        return this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }
}
class Funcionario{
    String nome;
    String cargo;
    int idade;
    double salario;
    double salarioAnual;
    String rg;
    Data dataDeEntrada;
    void mostra(){
        System.out.println("nome do funcionario: "+ this.nome+ "\ncargo :" +this.cargo+"\nidade: "+this.idade+ "\nsalário mensal:" +this.salario+ "\nrg: "+this.rg+ "\n data de entrada " +this.dataDeEntrada);
    }
    void calculoAnual(){
        double salarioAnual = this.salario*12;
        this.salarioAnual = salarioAnual;
        System.out.println("salario anual R$:"+salarioAnual);    

    }
     public static void main (String args[]){
    Funcionario f1 = new Funcionario();
    f1.dataDeEntrada  = new Data();
    f1.dataDeEntrada.preencheData(03, 03, 2016);
    f1.nome = "Umberto";
    f1.cargo = "analista";
    f1.idade = 27;
    f1.salario =6500;
    f1.rg ="44.681.646 2";
    f1.mostra();
    f1.calculoAnual();
    }


}
6 respostas

Está imprimindo errado porque o que está sendo impresso é uma referência ao objeto do tipo Data. Sobrescreva o método toString() da classe data como o exemplo abaixo:

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

Além disso, a assinatura do preencheData() está diferente do que está sendo usado no main, sem parâmetro nenhum e métodos do tipo void não tem retorno.

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

Faça essas modificações e teste novamente =)

não entendi como fazer isso : Sobrescreva o método toString() da classe data

Quando você usa o System.out.print você está imprimindo a saída padrão de uma classe, nesse caso foi imprimir a referência da classe. Sobrescrever o toString seria algo como "escrever por cima" da impressão normal. Viu o método toString que escrevi com um @Override por cima? É aquilo.

O método mostra() da classe funcionário é algo bem parecido, mas a diferença é que você não sobrescreve o padrão e sim usa um outro método.

entra no lugar do metodo preencheData? ou no lugar do System.out.println ?

Em nenhum dos dois. O método preencheData serve para você inserir informações. O System.out.print para imprimir alguma coisa no terminal.

O toString seria um novo método e quando você fizesse f1.mostra(); a parte de impressão da data ficaria de um jeito que você escreveu. Experimente copiar o toString que criei numa das respostas na classe Data. Depois faça um novo teste.

solução!

ele é um novo metodo , entendi , deu certo aqui . obrigado , nao ia descobri nunca isso sozinho vlw