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

Dúvida Arrays - Exercício 6 da Aula 4

Olá, estou com uma dúvida cruel, agradeço desde já toda a ajuda que puderem me dar.

O exercício fala o seguinte:

Crie um método para verificar se um determinado Funcionario se encontra ou não como funcionário desta empresa. O método deve se chamar contem e devolver um boolean. Ele recebe um funcionário.

    boolean contem(Funcionario f)

Faça um laço for pela array de funcionários, procurando alguém igual a ele. Se ele existir, retorne true, caso contrário false.

 boolean contem(Funcionario f) {
        // ...
    }

Você vai precisar fazer um for na sua array e verificar se a referência passada como argumento se encontra dentro da array. Evite ao máximo usar números hard-coded, isto é, use o .length ou o atributo livre.

========================

Ok, a minha resposta foi:

package ArraysExercicio6;

public class Arrays {

    public static void main(String[] args) {


        Empresa empresa = new Empresa();
        empresa.criarFuncionarios();

        empresa.contem(empresa.funcionarios[1]);

    }

}
package ArraysExercicio6;

class Empresa {

    Funcionario[] funcionarios = new Funcionario[3];

    void criarFuncionarios() {
        this.funcionarios[0].setNome("Maldini");
        this.funcionarios[0].setIdade(57);
        this.funcionarios[0].setSalario(12000.00);
        this.funcionarios[0].setSetor("Defesa");

        this.funcionarios[1].setNome("Roberto Carlos");
        this.funcionarios[1].setIdade(57);
        this.funcionarios[1].setSalario(30000.00);
        this.funcionarios[1].setSetor("Defesa");

        this.funcionarios[2].setNome("Zidane");
        this.funcionarios[2].setIdade(51);
        this.funcionarios[2].setSalario(42000.00);
        this.funcionarios[2].setSetor("Atacante");
    }

     boolean contem(Funcionario nome) {
         for (int i = 0; i < this.funcionarios.length; i++) {
             if (nome == this.funcionarios[i]) {
                 return true;
             }
         }
         return false;
     }
}
package ArraysExercicio6;

class Funcionario {


    String nome;
    int idade;
    String setor;
    double salario;

    void setNome(String nome){
        this.nome = nome;
    }

    void setIdade(int idade){
        this.idade = idade;
    }

    void setSetor(String setor){
        this.setor = setor;
    }

    void setSalario(double salario){
        this.salario = salario;
    }

    String getNome(){
        return this.nome;
    }

    int getIdade(){
        return this.idade;
    }

    String getSetor(){
        return this.setor;
    }

    double getSalario(){
        return this.salario;
    }




}

Gostaria de saber porque recebo o erro:

Exception in thread "main" java.lang.NullPointerException
    at ArraysExercicio6.Empresa.criarFuncionarios(Empresa.java:8)
    at ArraysExercicio6.Arrays.main(Arrays.java:9)

Quem puder me ajudar eu agradeço! Obrigado!

2 respostas

Tenta assim:

 void criarFuncionarios() {
        this.funcionarios[0] = new Funcionario(); // linha adicionada
        this.funcionarios[0].setNome("Maldini");
        this.funcionarios[0].setIdade(57);
        this.funcionarios[0].setSalario(12000.00);
        this.funcionarios[0].setSetor("Defesa");

        this.funcionarios[1] = new Funcionario();// linha adicionada
        this.funcionarios[1].setNome("Roberto Carlos");
        this.funcionarios[1].setIdade(57);
        this.funcionarios[1].setSalario(30000.00);
        this.funcionarios[1].setSetor("Defesa");

        this.funcionarios[2] = new Funcionario();// linha adicionada
        this.funcionarios[2].setNome("Zidane");
        this.funcionarios[2].setIdade(51);
        this.funcionarios[2].setSalario(42000.00);
        this.funcionarios[2].setSetor("Atacante");
    }
solução!

Alessandro, esse código

Funcionario[] funcionarios = new Funcionario[3];

apenas cria o array, mas não instancia cada funcionário.

Assim, na função criarFuncionarios(), você deve instanciar cada um dos três funcionários.

void criarFuncionarios() {
    this.funcionarios[0] = new Funcionario();
        this.funcionarios[0].setNome("Maldini");
        this.funcionarios[0].setIdade(57);
        this.funcionarios[0].setSalario(12000.00);
        this.funcionarios[0].setSetor("Defesa");
    // instanciar também o 1 e o 2
    }

Você também deve atentar ao fato de que o método contem() recebe um objeto do tipo Funcionario. Então, você deve instanciar um objeto desse tipo, popular com os dados que você quer saber se são iguais e, só então, chamar o método contem().

No main:

    // restante do código

        // essa chamada está errada
    // empresa.contem(empresa.funcionarios[1]);
    Funcionario f = new Funcionario();
    f.setNome("Maldini");
        f.setIdade(57);
        f.setSalario(12000.00);
        f.setSetor("Defesa");
        // exibir no console se o array contém
        System.out.println(empresa.contem(f));

Além disso, você precisa definir um critério para fazer a comparação na função contem(). Vou assumir que você quer fazer a comparação por nome (você aprenderá outras formas mais eficientes nas próximas aulas). Ficaria assim:

boolean contem(Funcionario func) {
    for (int i = 0; i < this.funcionarios.length; i++) {
        // comparando se o nome eh igual
        if (func.nome == this.funcionarios[i].getNome()) {
            return true;
        }
    }
    return false;
}

Espero ter ajudado.

Bons estudos.

Abraço.