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

Não consigo setar uma Data, da um erro de cannot find symbol!

class Funcionario{ private Data dataEntrada;

public void setData(Data dataEntrada){ this.dataEntrada = dataEntrada; } public Data getDataEntrada(){ return this.dataEntrada; } } 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; } }

class testeFuncionario{ public static void main(String[] args){ Funcionario f1 = new Funcionario();

f1.setData = new Data(); f1.preencheData(1,5,2010).setData();

System.out.println(getDataEntrada()); } }

8 respostas

Cadê a classe Data? Coloca também o erro exato que ocorre. Usa a função de formatar o código quando posta aqui (os números acima da caixa de texto). Isso ajuda para que as pessoas vejam melhor o código, muitas vezes nem precisando compilar para achar um erro.

class Funcionario{
     private Data dataEntrada;

     public void setData(Data dataEntrada){
         this.dataEntrada = dataEntrada;
    }
    public Data getDataEntrada(){
        return this.dataEntrada;
    }
}
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;
    }
}

class testeFuncionario{
    public static void main(String[] args){
        Funcionario f1 = new Funcionario();

        f1.setData = new Data();
        f1.preencheData(1,5,2010).setData();

        System.out.println(getDataEntrada());
    }
}

A linha

 f1.setData = new Data();

Está escrita errada. O método setData recebe uma data como parâmetro, então o new Data() deve estar dentro dos parenteses, e não como uma atribuição de valor. A passagem de valor usando = é feita quando temos uma variável, não com método.

A linha

f1.preencheData(1,5,2010).setData();

está totalmente incompreensível. Tu tá chamando o método preencheData que é da classe Data diretamente de dentro de Funcionario, que não tem esse método. Como o atributo dataEntrada é private, tu não pode usar esse método aí.

Oi André,

o Roberto te indicou as linhas problemáticas, mesmo:

f1.setData = new Data();
f1.preencheData(1,5,2010).setData();

O problema aqui é que o setData é um método e não um atributo, então, como o exercício sugere, em vez de usar o =, é necessário passar a informação dentro de parênteses:

f1.setData(new Data());

Agora, como você bem percebeu, a Data colocada alí está vazia: dia, mes e ano valem zero. Então, você gostaria de chamar o preencheData(1,5,2010). Apenas, atente para o fato de que esse método é da Data e não do Funcionario, então chamá-lo no f1 não é uma opção.

São três formas possíveis para resolver esse problema. A primeira é pegar a data do funcionario e chamar o método nela:

f1.setData(new Data());
f1.getData().preencheData(1,5,2010);

A segunda possibilidade é criar uma variáve para a Data, preenchê-la e, só então, setar no Funcionario:

Data dia = new Data();
dia.preencheData(1,5,2010);
f1.setData(dia);

E, finalmente, a terceira (e mais elegante) solução envolve alterar um pouco a classe Data. Note que realmente não faz muito sentido termos uma data sem dia, nem uma sem mês, nem uma sem ano. São atributos que devem necessariamente ser preenchidos... e assim deveriam estar no construtor.

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

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

Note também que, nesse caso, o método preencheData ficaria inútil porque o construtor já faz o trabalho dele. E, como agora as informações são passadas no construtor, na TestaFuncionario, aquelas linhas seriam substituídas por:

f1.setData(new Data(1,5,2010));

Pegou?

Ótima explicação Cecília. Extremamente didática.

Obrigado Cecilia pela atenção! Muito boa explicação, agora entendi.

solução!

Cecilia, agora quando imprimo a Data, ela aparece em forma de caracteres, não consigo entender.

class Funcionario{
    private  Data dataEntrada;

     public void setData(Data dataEntrada){
         this.dataEntrada = dataEntrada;
         }
    public Data getDataEntrada(){
        return dataEntrada;
    }
}
class Data{
    int dia;
    int mes;
    int ano;

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

    }

}

class testeFuncionario{
    public static void main(String[] args){

        Funcionario f1 = new Funcionario();
        f1.setData(new Data(1,5,2010));

        System.out.println(f1.getDataEntrada());
    }
}

Excelente a explicação da Cecília, tirou a dúvida que eu estava também. André, não sei se adianta ainda mas a solução pra entender a Data é adicionar o seguinte dentro da class Data:

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

e depois dentro de mostra(), localizada dentro da class funcionario, adicionar:

System.out.println("Data de entrada: "+this.dataEntrada.getFormatada());

Vlw!!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software