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

Array - Exercício 2 - por favor, preciso de ajuda no erro da compilação e orientação para o desenvolvimento. Onde deve ser criado o array ?

class FuncionarioEx2 { String nome; String depto; double salario; Data datEntradaBanco; String rg; } class Data { int dia; int mes; int ano; } class Empresa { String nomeEmpresa; String cnpj; FuncionarioEx2[] funcionarios;

void mostraEmpresa() { System.out.println(this.nomeEmpresa); System.out.println(this.cnpj); }

void adicionar(FuncionarioEx2 f) { for(int i = 0; i < this.funcionarios.length; i++) { FuncionarioEx2 func = this.funcionarios[i]; if(func != null) continue; this.func[i] = new FuncionarioEx2(); this.funcionarios[i] = f; } }

void mostraDadosFunc() { for(int i = 0; i < this.funcionarios.length; i++) { FuncionarioEx2 func = this.funcionarios[i]; if(func == null) continue; System.out.println("Nome: " + func.nome); System.out.println("Depto: " + func.depto); System.out.println("Salario:" + func.salario); System.out.println("RG: " + func.rg); } } }

class TesteFuncionario { public static void main(String[] args) { Empresa emp = new Empresa(); emp.nomeEmpresa = "Softwork"; emp.cnpj = "12345678901"; emp.mostraEmpresa();

// mostra array criado para emp.funcionarios emp.funcionaros = new FuncionarioEx2[10]; for(int i = 0; i < emp.funcionarios.length; i++) { if(emp.funcionarios[i] == null) continue; System.out.println("Nome: " + emp.funcionarios.nome); }

emp.f1 = new FuncionarioEx2(); emp.f1.nome = "Ricardo"; emp.f1.depto = "Informatica"; emp.f1.salario = 10000.0; emp.f1.rg = "123456"; emp.f1.datEntradaBanco = new Data(); emp.f1.datEntradaBanco.dia = 10; emp.f1.datEntradaBanco.mes = 8; emp.f1.datEntradaBanco.ano = 2011; adicionar(emp.f1);

emp.f2 = new FuncionarioEx2(); emp.f2.nome = "Cida"; emp.f2.depto = "Bancaria"; emp.f2.salario = 4500.0; emp.f2.rg = "9876543"; emp.f2.datEntradaBanco = new Data(); emp.f2.datEntradaBanco.dia = 10; emp.f2.datEntradaBanco.mes = 8; emp.f2.datEntradaBanco.ano = 2011; adicionar(emp.f2); emp.mostraDadosFunc(); } }

Arrays>javac FuncionarioEx2.java FuncionarioEx2.java:29: error: cannot find symbol this.func[i] = new FuncionarioEx2(); ^ symbol: variable func FuncionarioEx2.java:54: error: cannot find symbol emp.funcionaros = new FuncionarioEx2[10]; ^ symbol: variable funcionaros location: variable emp of type Empresa FuncionarioEx2.java:57: error: cannot find symbol System.out.println("Nome: " + emp.funcionarios.nome); ^ symbol: variable nome location: variable funcionarios of type FuncionarioEx2[] FuncionarioEx2.java:60: error: cannot find symbol emp.f1 = new FuncionarioEx2(); ^ symbol: variable f1 location: variable emp of type Empresa FuncionarioEx2.java:61: error: cannot find symbol emp.f1.nome = "Ricardo"; ^ symbol: variable f1 location: variable emp of type Empresa FuncionarioEx2.java:62: error: cannot find symbol emp.f1.depto = "Informatica"; ^ symbol: variable f1 location: variable emp of type Empresa FuncionarioEx2.java:63: error: cannot find symbol emp.f1.salario = 10000.0; ^ symbol: variable f1 location: variable emp of type Empresa FuncionarioEx2.java:64: error: cannot find symbol emp.f1.rg = "123456"; ^ symbol: variable f1 location: variable emp of type Empresa FuncionarioEx2.java:65: error: cannot find symbol emp.f1.datEntradaBanco = new Data(); ^ symbol: variable f1 location: variable emp of type Empresa FuncionarioEx2.java:66: error: cannot find symbol emp.f1.datEntradaBanco.dia = 10; ^ symbol: variable f1 location: variable emp of type Empresa FuncionarioEx2.java:67: error: cannot find symbol emp.f1.datEntradaBanco.mes = 8; ^ symbol: variable f1 location: variable emp of type Empresa FuncionarioEx2.java:68: error: cannot find symbol emp.f1.datEntradaBanco.ano = 2011; ^ symbol: variable f1 location: variable emp of type Empresa FuncionarioEx2.java:69: error: cannot find symbol adicionar(emp.f1);

4 respostas

Olá Ricardo, eu fiz alguns ajustes no código para você poder testar, deixei alguns comentários no código para tentar explicar o que fui ajustando, espero que tenha ficado bem explicado, qualquer dúvida é só postar

class FuncionarioEx2 {
    String nome;
    String depto;
    double salario;
    Data datEntradaBanco;
    String rg;
}
class Data {
    int dia;
    int mes;
    int ano;
}
class Empresa {
    String nomeEmpresa;
    String cnpj;
    FuncionarioEx2[] funcionarios;
    int ponteiro = 0; // Contador para ir incrementando cada um dos funcionários
                      // que estão sendo adicionados

    void mostraEmpresa() {
        System.out.println(this.nomeEmpresa);
        System.out.println(this.cnpj);
    }

    // O método adiciona simplemente irá receber um funcionário e adicionar ele
    // na próxima posição livre
    void adicionar(FuncionarioEx2 f) {
        this.funcionarios[ponteiro] = f; // recebe o funcionário que está sendo adicionado
        ponteiro++; // incrementa para a próxima posição livre
    }

    void mostraDadosFunc() {
        for (int i = 0; i < this.funcionarios.length; i++) {
            FuncionarioEx2 func = this.funcionarios[i];
            if (func == null)
                continue;
            System.out.println("Nome: " + func.nome);
            System.out.println("Depto: " + func.depto);
            System.out.println("Salario:" + func.salario);
            System.out.println("RG: " + func.rg);
        }
    }
}
class TesteFuncionario {
    public static void main(String[] args) {
        Empresa emp = new Empresa();
        emp.nomeEmpresa = "Softwork";
        emp.cnpj = "12345678901";
        emp.mostraEmpresa();

        emp.funcionarios = new FuncionarioEx2[10];

        // Para utilizar o método adiciona, cria um funcionario e depois passa ele
        // para o método adiciona da classe Empresa

        FuncionarioEx2 f1 = new FuncionarioEx2();
        f1.nome        = "Ricardo";
        f1.depto    = "Informatica";
        f1.salario    = 10000.0;
        f1.rg         = "123456";
        f1.datEntradaBanco         = new Data();
        f1.datEntradaBanco.dia    = 10;
        f1.datEntradaBanco.mes    = 8;
        f1.datEntradaBanco.ano    = 2011;

        emp.adicionar(f1); // Classe Empresa recebendo o funcionario

        // Mesma ideia do código anterior, cria o funcionário e passa para
        // a classe Empresa por meio do método adiciona
        FuncionarioEx2 f2 = new FuncionarioEx2();
        f2.nome        = "Cida";
        f2.depto    = "Bancaria";
        f2.salario    = 4500.0;
        f2.rg        = "9876543";
        f2.datEntradaBanco        = new Data();
        f2.datEntradaBanco.dia    = 10;
        f2.datEntradaBanco.mes    = 8;
        f2.datEntradaBanco.ano    = 2011;

        emp.adicionar(f2);


        emp.mostraDadosFunc();
    }
}

Fiz as alterações e esta mostrando a seguinte mensagem na compilação:

C:\CURSOS\ALURA\Java I Primeiros passos\04 - Arrays>javac FuncionarioEx2.java FuncionarioEx2.java:52: error: cannot find symbol emp.funcionaros = new FuncionarioEx2[10]; ^ symbol: variable funcionaros location: variable emp of type Empresa 1 error

C:\CURSOS\ALURA\Java I Primeiros passos\04 - Arrays>

Se eu comentar essa linha emp.funcionaros = new FuncionarioEx2[10]; na classe TesteFuncionario o erro é eliminado, mas ao executar a classe TesteFuncionario mostra o seguinte erro: C:\CURSOS\ALURA\Java I Primeiros passos\04 - Arrays>java TesteFuncionario Softwork 12345678901 Exception in thread "main" java.lang.NullPointerException at Empresa.adicionar(FuncionarioEx2.java:28) at TesteFuncionario.main(FuncionarioEx2.java:66)

C:\CURSOS\ALURA\Java I Primeiros passos\04 - Arrays>

Oi Ricardo,

Se você está usando o bloco de notas pode ser o unicode que está atrapalhando o seu código, nessa fase do curso, eu recomendo que você utilize o sublime text ou o VS Code, particularmente eu prefiro o segundo.

Agora observando o seu problema anterior, você já tinha esse erro.

solução!

class FuncionarioEx2 { String nome; String depto; double salario; Data datEntradaBanco; String rg; }

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

class Empresa { String nomeEmpresa; String cnpj; FuncionarioEx2[] funcionarios;

int ponteiro = 0; // Contador para ir incrementando cada um dos funcionarios // que estão sendo adicionados

void mostraEmpresa() { System.out.println(this.nomeEmpresa); System.out.println(this.cnpj); }

void adicionar(FuncionarioEx2 f) { this.funcionarios[ponteiro] =f; // recebe o funcionario que esta sendo // adicionado ponteiro++; // incrementa para a proxima posicao livre }

void mostraDadosFunc() { for(int i = 0; i < this.funcionarios.length; i++) { FuncionarioEx2 func = this.funcionarios[i]; if(func == null) continue; System.out.println("Nome: " + func.nome); System.out.println("Depto: " + func.depto); System.out.println("Salario:" + func.salario); System.out.println("RG: " + func.rg); } } }

class TesteFuncionario { public static void main(String[] args) { Empresa emp = new Empresa(); emp.nomeEmpresa = "Softwork"; emp.cnpj = "12345678901"; emp.mostraEmpresa();

emp.funcionarios = new FuncionarioEx2[10];

// Para utilizar o metodo adiciona, cria um funcionario e depois // passa ele para o metodo adiciona da classe Empresa

FuncionarioEx2 f1 = new FuncionarioEx2(); f1.nome = "Ricardo"; f1.depto = "Informatica"; f1.salario = 10000.0; f1.rg = "123456"; f1.datEntradaBanco = new Data(); f1.datEntradaBanco.dia = 10; f1.datEntradaBanco.mes = 8; f1.datEntradaBanco.ano = 2011; emp.adicionar(f1); // Clase Empresa recebendo o funcionario

FuncionarioEx2 f2 = new FuncionarioEx2(); f2.nome = "Cida"; f2.depto = "Bancaria"; f2.salario = 4500.0; f2.rg = "9876543"; f2.datEntradaBanco = new Data(); f2.datEntradaBanco.dia = 10; f2.datEntradaBanco.mes = 8; f2.datEntradaBanco.ano = 2011; emp.adicionar(f2); emp.mostraDadosFunc(); } }

Pessoal segue o programa correto e funcionando. Obrigado Joel Spinelli pela ajuda.