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

Não apresenta erro, mas não funciona.

Olá fiz a resolução parecido com o enunciado, porém no meu código funciona mas errado, ele compila normal e executa porem em vez de aparecer a data ele apresenta caracteres. Segue abaixo o código.

insira seu código aqui
class funcionarioData {
    String nome;
    int idade;
    String endereco;
    String telefone;
    String funcao;
    double salario;
    Data dataDeAdmissao; // Acredito que o erro esteja aqui, fiz igual a resolução
// Se eu usar String ou int antes de dataDeAdmissao; da erro e não sei o porque.
    double calculaGanhoAnual () {
    return this.salario * 12;
    }
    void mostra() {
    System.out.println("Nome: " + this.nome);
    System.out.println("Idade: " + this.idade + " Anos");
    System.out.println("Endereço: " + this.endereco);
    System.out.println("Telefone: " + this.telefone);
    System.out.println("Função: " + this.funcao);
    System.out.println("Salario Mensal: " + this.salario);
    System.out.println("Ganho Anual: " + this.calculaGanhoAnual());
    System.out.println("Data de Admissão: " + this.dataDeAdmissao); // Add this. como nos outros
    System.out.println("Data de Admissão: " + dataDeAdmissao); // retirei o "this.", mesmo erro.
    }
}
class Data {
    int dia;
    int mes;
    int ano;

    void inserirData(int dia, int mes, int ano){
    this.dia = dia;
    this.mes = mes;
    this.ano = ano;
    }    
}
class dadosFuncionarioData {
        public static void main (String[] args) {
        funcionarioData func001 = new funcionarioData();
        func001.nome = "João da Silva";
        func001.idade = (35);
        func001.endereco = "Rua Pitanga, 222";
        func001.telefone = "4374-2844";
        func001.funcao = "Contador";
        func001.salario = (1800.0);
        func001.dataDeAdmissao = new Data();
        func001.dataDeAdmissao.inserirData(12, 5, 1999);
        func001.mostra();
    }
}

No console do Cmder ele aparece isso. Obs: escrevi o código no bloco de notas.

C:\Users\Henrique Gino\Desktop\Cursos alura\Java I, Primeiros passos>java dadosFuncionarioData Nome: João da Silva Idade: 35 Anos Endereço: Rua Pitanga, 222 Telefone: 4374-2844 Função: Contador Salario Mensal: 1800.0 Ganho Anual: 21600.0 Data de Admissão: Data@6fffcba5 Data de Admissão: Data@6fffcba5

5 respostas

As classes no Java implementam um método chamado toString(), que diz pro Java como aquele tipo deve ser impresso. É isso que é chamado quando você executa o comando System.out.println() Data é uma classe que você criou. Esse valor que foi impresso é a representação do objeto porque a classe não implementa o método toString() e o Java não sabe como imprimir os valores. Você tem duas opções: implentar o método toString() na classe:

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

Não sei se você viu ou verá isso nesse curso (eu estou fazendo o de Java Web, já conheço um pouco da linguagem). Ou implementar a mesma coisa como um método da sua classe que você vai chamar na classe funcionarioData. Espero ter ajudado.

Uma variável de referência é um ponteiro para o endereço de memória do objeto.

A variável "Data dataDeAdmissao" não armazena as datas mas sim uma referência do objeto "Data" que foi criado.

O valor impresso é a posição de memória do objeto "dataDeAdmissao", e está correto.

Para imprimir os valores pode ser criado um método na classe Data para impressão dos mesmos, algo parecido com:

void imprimeData(){

System.out.println("Data de Admissão: " + this.dia + "/" + this.mes + "/" + this.ano);

}

E para chamar o método ao invés de:

System.out.println("Data de Admissão: " + this.dataDeAdmissao);

colocar:

dataDeAdmissao.imprimeData();

Obs.: não tive como testar o que escrevi, apenas demonstrei o raciocínio, sendo assim posso ter cometido pequenos erros de escrita, mas espero que o conceito ajude.

solução!

Olá Companheiro Henrique Cesar,

Acontece que tu estas a tentar imprimir um Objecto (no caso o teu é o Data), acompanhe:

Compare o teu Objecto Data como o Corpo Humano, são dois Objectos que têm seus atributos:

Corpo Humano: Cabeça, tronco e Membros

Data: dia, mês e ano.

Acontece que para exibir alguma coisa tens de ser especifico. Então para resolver o teu problema de querer mostrar a Data, tem de exibir todos os seus atributos (opcionas, só depende do que queres exibir):

System.out.println("Data de Admissão: " +dataDeAdmissao.dia+"/"+dataDeAdmissao.mes+"/"+dataDeAdmissao.ano);

Se tentares exibir o Objecto vai te retornar o resultado anterior.

Obrigado, Bem Haja

Catiano Carvalho

Legal galera!!!

Obrigado DEV-Billing ERP, é realmente o que você disse eu pedi pra imprimir ás dataDeAdmissao.dia e etc dentro do void mostra() e funcionou.

Obrigado Carlos eu sabia que tinha esse método de criar um void para imprimir a data como você deixou de exemplo void imprimeData, mas minha intenção era simplificar o código e fazer ele funcionar junto com o void mostra(), sem ter que criar um método para para imprimir a data.