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

Duvida com getters e setters na Array

Ola,

Escrevi os codigos abaixo e compilou direito.

class Empresa{
    String nome;
    String cnpj;
    private Funcionario[] empregados;
    private int livre = 0;

    public void setEmpregados(Funcionario[] funcionarios){
        this.empregados = funcionarios;
        this.livre++;
    }

    public Funcionario getFuncionario(int i){
        return this.empregados[i];
    }
}
class TestaEmpresa{
    public static void main(String[] args){
        Empresa cola = new Empresa();
        Funcionario[] f = new Funcionario[10];

        Funcionario f1 = new Funcionario();
        f1.setNome("Joao");
        f1.setSalario(1200);

        Funcionario f2 = new Funcionario();
        f2.setNome("Fabricio");
        f2.setSalario(1300);

        Funcionario f3 = new Funcionario();
        f3.setNome("Gal");
        f3.setSalario(1400);

        System.out.println(cola.contem(f2));
    }
}

Agora a minha pergunta é, como que eu uso o meu 'set' para adicionar os funcionarios para a Array e como exibir-los com os 'get'?

4 respostas
solução!

Olá Gal,


public static void main(String[] args){
        Empresa cola = new Empresa();
        Funcionario[] f = new Funcionario[10];

        Funcionario f1 = new Funcionario();
        f1.setNome("Joao");
        f1.setSalario(1200);

        Funcionario f2 = new Funcionario();
        f2.setNome("Fabricio");
        f2.setSalario(1300);

        Funcionario f3 = new Funcionario();
        f3.setNome("Gal");
        f3.setSalario(1400);

    //Passo1: Adicionando o funcionário dentro da lista (array) de funcionários:
    f[0] = f1
    f[1] = f2
    f[3] = f3

    //Passo2: Criando um novo Objeto empresa e adicionando a lista de funcionários no seu construtor:
    Empresa empresa = new Empresa (f);

    //Passo3: Recuperando todos os funcionários:
    for(int i =0; i<f.size(); i++){
        empresa.getFuncionario(i);
        System.out.Println("Funcionário: " + i.getNome() );    
    }

   }

Apenas para complementar:

O sua classe Empresa possuí basicamente três atributos:

  • Nome
  • CNPJ
  • Lista de Funcionários (Array)

Logo, ela deve possuir os métodos de acesso à estes atributos. Mas perceba que a Empresa não tem o atributo Funcionário ( oque ela possuí é uma lista de funcionários), logo, não é prático a sua empresa devolver esse atributo.

O fluxo mais correto seria o seu objeto Empresa devolver a lista de funcionários que ela possuí, e só então acessar algum funcionário dessa lista.

É claro que isso não é uma "regra".

Olá Gal,

Para a inserção dos funcionários na empresa, entendo que é mais prático criar o método adiciona para atribuir diretamente ao Array.

    void adiciona(Funcionario f) {
        this.empregados[livre] = f;
        this.livre++;
    }

Mas nada impede que você associe os funcionários ao seu Array na classe, adicionando o f1, f2 e f3 ao f e passar o f para o seu setEmpregados. Só acho que o código acaba ficando um pouco "poluído".

Já para o método contem(), você terá que percorrer a sua Array de funcionários para realizar a verificação, algo como:

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

Espero ter ajudado.

Bom dia Gal,

O Array é um objeto e deve ser instanciado, logo quando faz o set você esta instanciando com um array vazio. Para popular você deve percorrer (com um for) e adicionar um new Funcionario() a capa posição do array. Para isso seria algo assim:

for(int i=0;i < tamanho do array; i++) {
    funcionarios[i] = new Funcionario();
}

Espero ter ajudado! Abraços

No caso o amigo Luis pulou uma etapa ali no passo 2.

Empresa cola = new Empresa ();
cola.setEmpregados(f);

No caso do passo 3, você poderia colocar em um método na classe, parecido com o que você ja fez. Porém o que você fez pega somente um funcionario por indice.

Na classe empresa:

public void getEmpregados(){
    for(int i =0; i<f.size(); i++){
        f = getFuncionario(i);
            System.out.Println("Funcionário: " + f.getNome() );   
    }
}

Daí no main você só precisa usar

cola.getEmpregados();