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

[DÚVIDA] Ex 6 da Aula 3 - Começando com Orientação de Objetos

Olá!

Não estou conseguindo imprimir o preencheData(). Poderiam me ajudar?

Classe Funcionário:

public class Funcionario {
    String nome;
    String rg;
    double salario;
    String departamento;
    Data dataDeEntrada; //no lugar do String dataDeEntrada;

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

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

    void mostra (){
        System.out.println ("Nome do(a) Funcionário(a): " + this.nome);
        System.out.println ("RG do(a) Funcionário(a): " + this.rg);
        System.out.println ("Salário atual: " + this.salario);
        System.out.println ("Departamento: " +this.departamento);
        System.out.println("Data de Entrada: " +this.dataDeEntrada);
    }
}

Classe TestaFuncionario:

public class TestaFuncionario {


    public static void main(String[] args) {

                Funcionario adelita = new Funcionario ();
                adelita.nome = "Adelita =D";
                adelita.rg = "1234678";
                adelita.salario = 800.0;
                adelita.recebeAumento(20.0);
                adelita.departamento = "S.I.";

                adelita.dataDeEntrada = new Data();
                adelita.dataDeEntrada.preencheData(1, 7, 2009);

                adelita.mostra();

                /**
                System.out.println("Nome da Funcionária: " +adelita.nome);
                System.out.println("RG da Funcionária: " +adelita.rg);
                System.out.println("Salário Atual: " + adelita.salario);
                System.out.println("Departamento: " + adelita.departamento);
                */          
            }
        }

E Classe Data:

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

Poderiam me ajudar? Obrigada!

8 respostas

Qual o erro que você obtém? Ou é apenas um campo em branco ou nulo?

Edit:

Entendi aqui, observe que o método preencheData é do tipo void, ou seja, ele não retorna nada, apenas nesse caso preenche as variáveis da classe Data. Ou seja, esse método não pode ser impresso. Agora se você quiser receber os valores atribuídos as variáveis da classe, você pode fazer desta forma, acessando os valores através da variável dataDeEntrada de seu objeto Funcionario:

public class TestaFuncionario {

    public static void main(String[] args) {

        Funcionario adelita = new Funcionario();
        adelita.nome = "Adelita =D";
        adelita.rg = "1234678";
        adelita.salario = 800.0;
        adelita.recebeAumento(20.0);
        adelita.departamento = "S.I.";

        adelita.dataDeEntrada = new Data();
        adelita.dataDeEntrada.preencheData(1, 7, 2009);

        adelita.mostra();
        //Impressão da data desejada: 
        System.out.println("Data: " + adelita.dataDeEntrada.dia + "/" + adelita.dataDeEntrada.mes + "/"
                + adelita.dataDeEntrada.ano);


    }
}

Espero ter solucionado sua dúvida.

Olá Ian!

O erro que ocorre é que, na hora de imprimir a data de entrada, aparece "testafuncionario.Data@2a139a55". E, não sei o que acontece.. Mesmo com sua dica, continua dando o mesmo erro.

Você testou com o código que mandei? Realizei o teste e funcionou normalmente. Essa saída parece a identificação do objeto, o que necessitaria a subscrição do método toString de sua classe. Não estou em casa agora, vejo com detalhes quando chegar.

Olá Ian! Testei como você enviou!

O método toString eu não conheço. =/

Mas muito obrigada pela atenção!

Por nada, estamos aqui pra isso. Assim que estiver no meu PC verifico.

solução!

Já consegui ver aqui, é o seguinte: O método mostra() está pedindo o syso (System.out.println) da dataDeEntrada do Funcionário, o que acontece nesse caso, é que o java chama o método toString da classe Data. Esta por padrão imprimi uma identificação do objeto que é o que vc viu: testafuncionario.Data@2a139a55. Para resolver esse problema vamos sobrescrever o método na classe Data, dessa forma:

public 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 this.dia + "/" + this.mes + "/" + this.ano;
    }
}

Dessa forma, quando o syso for chamado, o mesmo retornará o retorno dado no toString da classe Data.

Adelita, você criou uma classe específica para tratar de datas. Quando você pede para imprimir essa data, o Java não sabe como interpretar do jeito que você entenda, então ele imprime o endereço do objeto na memória.

Por isso você deve criar um método específico para retornar a data no formato que você deseja. Pode ser um getData() assim:

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

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

ou, até mesmo, sobrescrever o método toString() (o que é recomendável que você faça sempre em suas classes), como o Ian mencionou, adicionando ao final da sua classe Data o seguinte método:

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

Ian e Manoel, muito obrigada pela ajuda!! Não consegui marcar os dois como "solução".