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

Dúvida no Ex. 5 do Capítulo 4 - Arrays

Estou com dificuldade para compilar o referido exercício, tentei de toas as formas, mas a instrução dentro for, this.funcinarios[i].mostra(); não compila.

class Empresa {

    Funcionario[] funcionarios;
    int cont = 0;

    void adiciona(Funcionario f) {
        this.funcionarios[cont++] = f;
    }

    void mostraEmpregados() {
        for(int i = 0; i < funcionarios.length; i++) {
            Funcionario funcionario = this.funcionarios[i];
            if (funcionario == null) continue;
                    System.out.println("R$ " + this.funcionarios[i].salario
                    + " - Nome: " + funcionario.nome + " - RG: "
                    + funcionario.rg + " - Data de Admissão: " +
                    funcionario.dataAdmissao);
        }
    }

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

            //Aula0406.java:24: error: cannot find symbol
            //this.empregados[i].mostra();
            //^
            //symbol: variable empregados
            //1 error

            //this.empregados[i].mostraEmpregados();
            //Aula0406.java:32: error: cannot find symbol
            //this.empregados[i].mostraEmpregados();
            //^
            //symbol: variable empregados
            //1 error
        }
    }
}

class Funcionario {
    String nome;
    int salario;
    String rg;
    String dataAdmissao;
}

class Aula0406 {

    public static void main (String[] args) {

        Empresa empresa = new Empresa();
        empresa.funcionarios = new Funcionario[10];

        Funcionario f1 = new Funcionario();
        f1.nome = "Fulano";
        f1.salario = 1000;
        f1.rg = "1.111.111-1";
        f1.dataAdmissao = "12-12-12";
        empresa.adiciona(f1);

        Funcionario f2 = new Funcionario();
        f2.nome = "Ciclano";
        f2.salario = 1100;
        f2.rg = "2.222.222-2";
        f2.dataAdmissao = "11-11-11";
        empresa.adiciona(f2);

        Funcionario f3 = new Funcionario();
        f3.nome = "Beltrano";
        f3.salario = 1050;
        f3.rg = "3.333.333-3";
        f3.dataAdmissao = "10-10-10";
        empresa.adiciona(f3);

        empresa.mostraTodasAsInformacoes();
    }
}

olhei a resposta para ver se estava fazendo certo e confere com meu código,.

4 respostas
        //this.funcionarios[i].mostra();// - Não compila.
                //Aula0406.java:24: error: cannot find symbol
                //this.funcionarios[i].mostra();// - Não compila.
                //^
                //symbol:   method mostra()
                //location: class Funcionario
                //1 error


                //this.funcionarios[i].mostraEmpregados(); - Não compila.
                //Aula0406.java:33: error: cannot find symbol
                //this.funcionarios[i].mostraEmpregados();
                //^
                //symbol:   method mostraEmpregados()
                //location: class Funcionario
                //1 error

Errei na colagem do comentário...

Acima o comentário atualizado.

A sua classe Funcionario tem atributos, mas nenhum método:

class Funcionario {
    String nome;
    int salario;
    String rg;
    String dataAdmissao;
}

mas você está tentando acessar métodos que não existem:

this.funcionarios[i].mostra();
this.funcionarios[i].mostraEmpregados();

Esses métodos são da classe empresa.

solução!

Olá Emerson, é exatamente como João explicou. Quando você coloca this.funcionarios[i].mostra(); você está trabalhando em cima dos funcionários que estão dentro do array em empresa. Então quando você chama o método mostra() é um método que tem que estar presente em Funcionario, não em Empresa.

Sendo assim, eu recomendo você implementar o método mostra() dentro de Funcionario e usar o mostraEmpregados() da seguinte forma: this.mostraEmpregados();

Bacana demais. Respostas ajudaram muito e clarearam várias coisas. Valeu!!!