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

Chamada de metodo

Esta linha retorna este erro:
f1.setDataEntrada(new Data(1, 8, 2011));

Funcionario.java:145: error: cannot find symbol
        f1.setDataEntrada(new Data.preencheData(1, 8, 2011));
                                  ^
  symbol:   class preencheData
  location: class Data
1 error
-------------------------------------------------------------------
O que ha de errado minha classe Data? Segue a mesma e as demais:
class Funcionario
{
    private String nome;
    private String departamento;
    private double salario;
    private Data dataEntrada;
    private String rg;

    public double getGanhoAnual(){
        return this.salario * 12;
    }
    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;
    }
    public void setRg(String rg){
        this.rg = rg;
    }

    public void recebeAumento(double aumento)
    {
        salario += aumento;
    }

    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);
        System.out.println("RG.............: " + this.rg);
        //System.out.println("Ganho Anual....: " + this.calculaGanhoAnual());
        System.out.println("Ganho Anual....: " + this.getGanhoAnual());
        //System.out.println("Entrou Em...Dia: " + this.dataEntrada.dia);
        //System.out.println("............Mes: " + this.dataEntrada.mes);
        //System.out.println("............Ano: " + this.dataEntrada.ano);
        //System.out.println("Data de entrada: " + this.dataEntrada.getFormatada());
        System.out.println("");
    }

}
class Empresa{
    String nome;
    Funcionario[] empregados; //Aqui foi criado um atributo "empregados" do tipo "array" da "classe Funcionario"
    String cnpj;
    int livre = 0;

    void adiciona(Funcionario f){
        this.empregados[this.livre] = f; //O atributo "empregados" desta(this) classe.
        this.livre++;
    }

    void mostraEmpregados() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição: " + i);
            System.out.println("Nome do Funcionario...: " + this.empregados[i].getNome());
            System.out.println("....................R$: " + this.empregados[i].getSalario());
            }
        }

    void mostraTodasAsInformacoes() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição: " + i);
            this.empregados[i].mostra();
        }
    }

    //verifica se um determinado Funcionario se encontra ou não como funcionário desta empresa.
    boolean contem(Funcionario f) {
        for (int i = 0; i < this.livre; i++) {
            if (f == this.empregados[i]) {
                return true;
            }
        }
        return false;
    }
}

class TestaEmpresa{
    public static void main(String[] args){
        Empresa empresa = new Empresa();
        empresa.empregados = new Funcionario[10]; //Aqui instanciamos a classe Funcionario para o atributo 
                                                  //empregados que é uma array da classe Funcionario...

        Funcionario f1 = new Funcionario(); //Cria um objeto Funcionario na memoria e instancia o atributo f1, setando o primeiro objeto
        f1.setSalario(16875);
        f1.setNome("Everton");
        f1.setDepartamento("Diretoria");
        f1.setRg("32131654");
        empresa.adiciona(f1);               //Invoca o metodo adiciona da Classe Empresa e este metodo incrementa +1 ao atributo livre...
        empresa.mostraTodasAsInformacoes();
    }
}

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;
    }
    String getFormatada(){
        return this.dia +"/"+ this.mes +"/"+ this.ano;
    }
}

class TestaFuncionario
{
    public static void main(String[] args)
    {
        Funcionario f1 = new Funcionario();
        f1.setNome("Everton");
        f1.setSalario(7000);
        f1.recebeAumento(2500);
        f1.setDataEntrada(new Data(1, 8, 2011));
        f1.setDepartamento("Comercial");
        f1.setRg("12345678");

        f1.mostra();
    }
}
19 respostas

Olá Everton Almeida,

você deu new Data, mas esqueceu dos parênteses. O correto seria new Data(). Veja se era só isso.

Abraços

Na classe Funcionario coloca assim:

private Data dataEntrada = new Data();

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

Para settar a data você pode chamar f1.dataEntrada.preencheData(1,8,2011);
ou criar o modificador da data na classe Funcionario igual da classe Data;

    public void setDataEntrada (int dia,int mes,int ano)
    {
        this.dataEntrada.dia = dia;
        this.dataEntrada.mes = mes;
        this.dataEntrada.ano = ano;
    }

Se voce criar o modificador na classe Funcionario 
Na classe TestaFuncionario,

f1.setDataEntrada(1, 8, 2011);

Também fiquei confuso nessa parte...

Rafael, se os atributos da classe Data estiverem como private esse seu exemplo funciona? O setter da data não deveria estar na própria classe Data?

Eu tentei uma solução onde tinha 2 setters, um na classe funcionário e outro na classe Data. O da classe funcionário passava os parâmetros para o setData da classe Data, o qual realmente fazia a alteração, mas achei meio gambiarra...

No final acabei comentando a parte do código que setava a data.

Se fosse seguir os gabaritos, parece que teria que fazer o construtor da classe Data, assunto que ainda não foi abordado.

Luiz, sim, se os atributos da classe data estivem como private, esse meu exemplo não funcionaria.

Teria que ser criado um setter na classe data, exemplo:

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

se você quisesse colocar também um setDataEntrada na classe Funcionario:

public void setDataEntrada(int dia, int mes, int ano){ this.dataEntrada.setData(dia, mes, ano); }

Não sei se isso seria legal, mas é possivel assim(com os recursos que aprendemos até agora).

Blz? Qualquer chama ae ;-)

Esqueci de formatar rsrs

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

public void setDataEntrada(int dia, int mes, int ano){ 
   this.dataEntrada.setData(dia, mes, ano); 
}

Melhor assim hehe

Bom dia Rafael!

Quero agradecer sua disposição em me ajudar e pedir desculpa por demorar a responder... Meu tempo é bem pouco para dedicar ao curso... Tentando resolver acabei por desorganizar meu código de forma que nem eu estou entendendo mais nada. Rsssss

Vou reformular tudo aqui e tentar novamente qualquer duvida vou lhe incomodar ok? Mais uma vez obrigado e até mais.
Rafael veja o erro na linha 31:
C:\Users\Everton\workspace\Alura>javac Funcionario.java
Funcionario.java:135: error: cannot find symbol
        return this.dataEntrada.getFormatada(); //Erro nesta linha...
                   ^
  symbol: variable dataEntrada
1 error
--> Abaixo compartilhei todo meu codigo...
--------------------------------------------------------------------------
class Funcionario
{
    private String nome;
    private String departamento;
    private double salario;
    private Data dataEntrada = new Data();
    private String rg;

    public double getGanhoAnual(){
        return this.salario * 12;
    }
    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.getFormatada(); ***//Erro nesta linha...***
    }
    public void setDataEntrada(int dia,int mes,int ano)
    {
    this.dataEntrada.dia = dia;
    this.dataEntrada.mes = mes;
    this.dataEntrada.ano = ano;
    }
    public String getRg(){
        return this.rg;
    }
    public void setRg(String rg){
        this.rg = rg;
    }

    public void recebeAumento(double aumento)
    {
        salario += aumento;
    }

    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);
        System.out.println("RG.............: " + this.rg);
        //System.out.println("Ganho Anual....: " + this.calculaGanhoAnual());
        System.out.println("Ganho Anual....: " + this.getGanhoAnual());
        //System.out.println("Entrou Em...Dia: " + this.dataEntrada.dia);
        //System.out.println("............Mes: " + this.dataEntrada.mes);
        //System.out.println("............Ano: " + this.dataEntrada.ano);
        //System.out.println("Data de entrada: " + this.dataEntrada.getFormatada());
        System.out.println("");
    }

}
class Empresa{
    String nome;
    Funcionario[] empregados; //Aqui foi criado um atributo "empregados" do tipo "array" da "classe Funcionario"
    String cnpj;
    int livre = 0;

    void adiciona(Funcionario f){
        this.empregados[this.livre] = f; //O atributo "empregados" desta(this) classe.
        this.livre++;
    }

    void mostraEmpregados() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição: " + i);
            System.out.println("Nome do Funcionario...: " + this.empregados[i].getNome());
            System.out.println("....................R$: " + this.empregados[i].getSalario());
            }
        }

    void mostraTodasAsInformacoes() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição: " + i);
            this.empregados[i].mostra();
        }
    }

    //verifica se um determinado Funcionario se encontra ou não como funcionário desta empresa.
    boolean contem(Funcionario f) {
        for (int i = 0; i < this.livre; i++) {
            if (f == this.empregados[i]) {
                return true;
            }
        }
        return false;
    }
}

class TestaEmpresa{
    public static void main(String[] args){
        Empresa empresa = new Empresa();
        empresa.empregados = new Funcionario[10]; //Aqui instanciamos a classe Funcionario para o atributo 
                                                  //empregados que é uma array da classe Funcionario...

        Funcionario f1 = new Funcionario(); //Cria um objeto Funcionario na memoria e instancia o atributo f1, setando o primeiro objeto
        f1.setSalario(16875);
        f1.setNome("Everton");
        f1.setDepartamento("Diretoria");
        f1.setRg("32131654");
        empresa.adiciona(f1);               //Invoca o metodo adiciona da Classe Empresa e este metodo incrementa +1 ao atributo livre...
        empresa.mostraTodasAsInformacoes();
    }
}

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 void setData(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }
    String getFormatada(){
        return this.dia +"/"+ this.mes +"/"+ this.ano;
    }
}

class TestaFuncionario
{
    public static void main(String[] args)
    {
        Funcionario f1 = new Funcionario();
        f1.setNome("Everton");
        f1.setSalario(7000);
        f1.recebeAumento(2500);
        //f1.setDataEntrada(new Data(1, 8, 2011));
        //f1.dataEntrada.preencheData(1,8,2011);
        f1.setDataEntrada(1, 8, 2011);
        f1.setDepartamento("Comercial");
        f1.setRg("12345678");

        f1.mostra();
    }
}

Na linha onde você comentou "//Erro nesta linha..." você definiu o retorno do método como Data "public Data getDataEntrada()", só que você está retornando uma String, veja na class Data o método getFormatada() ele retorna uma String no formato d/m/Y. Sugestão, ou você muda o retorno do método para String ou muda o retorno de getFormatada() para devolver uma Data, ou ainda pode retirar a chamada do getFormatada() retornando apenas this.dataEntrada;

Everton,

Desculpa, o código como eu te passei está errado mesmo.
É como o Adelson explicou.

Foi mal.

Vlw Adelson.
Grande Rafael,

Sem problemas irmão! Sua solução também ampliou meus conhecimentos...
Obrigado por sua disposição!

Valeu mesmo!

Everton, ainda sou iniciante na programação Java, mas se você modificar o seu código conforme abaixo, ele funcionará (só que você despendeu recursos para informar uma data que não foi exibida no final do programa):

class TestaFuncionario { public static void main(String[] args) { Funcionario f1 = new Funcionario(); Data d = new Data(); d.preencheData(1, 8, 2011);

f1.setNome("Everton"); f1.setSalario(7000); f1.recebeAumento(2500); f1.setDataEntrada(d); f1.setDepartamento("Comercial"); f1.setRg("12345678"); f1.mostra(); } }

Everton, na sua classe Funcionario você tem:

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

onde o parâmetro dataEntrada é um objeto do tipo Data. Porém, na sua classe Data você não definiu o CONSTRUTOR 'public Data(int dia, int mes, int ano){ this.dia = dia; this.mes = mes; this.ano = ano;}' para 'setar' os atributos dia, mes e ano. Portanto, o código f1.setDataEntrada(new Data(1, 8, 2011)) é inválido.

Peço desculpas aos amigos deste fórum, mas novamente recorro a ajuda
de vocês, já tentei compreender o que esta ocasionando o erro abaixo e
não consegui... Segue o erro e o todo meu codigo com todas minhas classes...
----------------------------------------------------------------------------
Funcionario.java:130: error: method setDataEntrada in class Funcionario cannot b
e applied to given types;
                f1.setDataEntrada(16, 02, 1992);
                  ^
  required: Data
  found: int,int,int
  reason: actual and formal argument lists differ in length
1 error
----------------------------------------------------------------------------
class Funcionario
{
    private String nome;
    private String departamento;
    private double salario;
    private String rg;
    private Data dataEntrada=new Data();

    //metodo construtor padrão
    public Funcionario() {}

    //metodo que pede ou exige o nome do funcionario
    public Funcionario(String nome) {    
        this.nome = nome;
    }

    public double getGanhoAnual() {
        return this.salario * 12;
    }
    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; //Erro nesta linha...
    }
    public void setDataEntrada (Data dataEntrada) {
        this.dataEntrada = dataEntrada;
    }
    public String getRg(){
        return this.rg;
    }
    public void setRg(String rg){
        this.rg = rg;
    }

    public void recebeAumento(double aumento)
    {
        salario += aumento;
    }

    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);
        System.out.println("RG.............: " + this.rg);
        //System.out.println("Ganho Anual....: " + this.calculaGanhoAnual());
        System.out.println("Ganho Anual....: " + this.getGanhoAnual());
        //System.out.println("Entrou Em...Dia: " + this.dataEntrada.dia);
        //System.out.println("............Mes: " + this.dataEntrada.mes);
        //System.out.println("............Ano: " + this.dataEntrada.ano);
        //System.out.println("Data de entrada: " + this.dataEntrada.getFormatada());
        System.out.println("");
    }

}
class Empresa{
    private String nome;
    private Funcionario[] empregados; //Aqui foi criado um atributo "empregados" do tipo "array" da "classe Funcionario"
    private String cnpj;
    private int livre = 0;

    //Construtor da classe Empresa
    public Empresa(String cnpj){
        this.cnpj = cnpj;
        this.empregados = new Funcionario[10];
    }

    public String getCnpj(){
        return this.cnpj;
    }

    void adiciona(Funcionario f){
        this.empregados[this.livre] = f; //O atributo "empregados" desta(this) classe.
        this.livre++;
    }

    void mostraEmpregados() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição: " + i);
            System.out.println("Nome do Funcionario...: " + this.empregados[i].getNome());
            System.out.println("....................R$: " + this.empregados[i].getSalario());
            }
        }

    void mostraTodasAsInformacoes() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição: " + i);
            this.empregados[i].mostra();
        }
    }

    //verifica se um determinado Funcionario se encontra ou não como funcionário desta empresa.
    boolean contem(Funcionario f) {
        for (int i = 0; i < this.livre; i++) {
            if (f == this.empregados[i]) {
                return true;
            }
        }
        return false;
    }
}

class TestaEmpresa{
    public static void main(String[] args){
        Empresa empresa = new Empresa("37297777000170");
        //empresa.empregados = new Funcionario[10]; //Aqui instanciamos a classe Funcionario para o atributo 
                                                  //empregados que é uma array da classe Funcionario...

        Funcionario f1 = new Funcionario(); //Cria um objeto Funcionario na memoria e instancia o atributo f1, setando o primeiro objeto
        f1.setSalario(16875);
        f1.setNome("Everton");
        f1.setDepartamento("Diretoria");
        f1.setRg("32131654");
        f1.setDataEntrada(16, 02, 1992);
        empresa.adiciona(f1);               //Invoca o metodo adiciona da Classe Empresa e este metodo incrementa +1 ao atributo livre...
        empresa.mostraTodasAsInformacoes();
    }
}

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

    public Data () {
        // TODO Auto-generated constructor stub
    }

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

    void preencheData (int dia,int mes,int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }
    public void setData(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }
    public String getFormatada(){
        String data = this.dia + "/"+ this.mes + "/" + this.ano;
        return data;
    }
}

class TestaFuncionario
{
    public static void main(String[] args)
    {
        Funcionario f1 = new Funcionario();
        f1.setNome("Everton");
        f1.setSalario(7000);
        f1.recebeAumento(2500);
        //f1.setDataEntrada(new Data(1, 8, 2011));
        f1.setDataEntrada(new Data (8, 8, 1986));
        f1.setDepartamento("Comercial");
        f1.setRg("12345678");

        f1.mostra();
    }
}

Oi Everton,

para outras dúvidas tente abrir outro tópico que facilita a ajuda. No seu exemplo anterior o erro é que o seu método setDataEntrada, na classe Funcionário, recebe apenas uma Data e você está chamando ele passando três valores inteiros:

f1.setDataEntrada(16, 02, 1992);

Logo ele não funciona e o erro avisa isso a você. O correto seria você passar uma referência para um objeto Data:

f1.setDataEntrada(new Data(16, 02, 1992)).

Outra solução seria:

Data dataQueFuncionarioEntrou = new Data(16, 02, 1992); f1.setDataEntrada(dataQueFuncionarioEntrou);

Se for só esse erro avisa aqui, para a gente trancar o tópico.

Olá Fabio, bom dia e obrigado sua atenção!

Alterei a linha(130) do erro para:
f1.setDataEntrada(new Data(16, 02, 1992));

Quando executo olha como a data é retornada:
C:\Users\Everton\workspace\Alura>java TestaEmpresa
Funcionário na posição: 0
Nome...........: Everton
Departamento...: Diretoria
Salario........: 16875.0
--> Data de Entrada: Data@15db9742
RG.............: 32131654
Ganho Anual....: 202500.0

Consegue me ajudar nessa Fabio, já revisei todo codigo mas não descobri o porque...
solução!

Oi Everton, no seu método mostra vc não chamou o getDataFormatada da Data. Por isso ele está mostrando esse conteúdo que você vai aprender mais a frente na parte de java.lang.

Olá Fábio!

Então tá certo, é que eu não queria prosseguir o curso
até resolver este detalhe... Mas agora entendi, vou prosseguir
e resolvo mais adiante! :)

Fabio, quero agradece-lo por sua disposição em me ajudar!
Que Deus lhe abençoe e sucesso em seus estudos e projetos!

Everton acredito que voce poderia usar esse print para resolver o problema da metodo mostra()

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

Everton

Na sua classe Funcionario, método mostra(), onde você escreveu: System.out.println("Data de Entrada: " + this.dataEntrada); mude para: System.out.println("Data de Entrada: " + this.dataEntrada.getFormatada()); e o código irá funcionar.

Você estava tentando fazer o objeto dataEntrada se comportar como uma String. Evocando o método getFormatada(), aí, sim, você terá a String que você desejava. Abraços.