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

Adicionando objeto em outro

Na verdade estou até refazendo o curso terminado, porque fiquei com dificuldade com esses arrays de objeto. Olha esse código:

class Empresa{

    Funcionario[] funcionario;

    String rs;
    String cnpj;
    int proximo=0;

    void criaFunc(){

        for(int i=0;i<funcionario.length;i++){

            funcionario[i] = new Funcionario();
        }

    }

    void adiciona(Funcionario f){

        this.funcionario[this.proximo]=new Funcionario();
        this.funcionario[this.proximo]=f;
        this.proximo++;

    }

    void mostra(){
        for(int i=0;i<funcionario.length;i++){

            if(this.funcionario[i]==null) continue;
            System.out.println("Funcionario "+(i+1)+"\nNome: "+funcionario[i].nome+"\nCPF: "+funcionario[i].CPF);


        }


    }



}

class Funcionario{

    String nome;
    String CPF;
    String data;


}



class BancoTri{

    public static void main(String[] args){

    Empresa escola = new Empresa();
    escola.funcionario = new Funcionario[10];
    //escola.criaFunc();

    Funcionario empregado = new Funcionario();


    empregado.nome = "Marcelo";
    empregado.CPF = "486611";

    escola.adiciona(empregado);    


    empregado.nome = "Thiago";
    empregado.CPF = "4616168";

    escola.adiciona(empregado);

    escola.mostra();

    System.out.println(escola.funcionario[0].nome);
    System.out.println(escola.funcionario[1].nome);


    }


}

Da pra ver que não consigo ir adicionando funcionarios, como Thiago e depois marcelo, posto que o ultimo funcionario a ser adicionado ocupa a posição de todos os indices até então.

Seria pq estou mechendo no mesmo endereço de memória? O array pega a referencia do funcionario solto, né? Não cria uma cópia.

3 respostas

Olá Lucas.

Isso mesmo, você está mexendo sempre na mesma instância de funcionário e adicionando ela duas vezes no array, por isso que tanto o funcionario[0].nome e funcionario[1].nome mostram o mesmo valor, no seu caso Thiago, pois é a mesma referência. Se você quiser adicionar outro funcionário é preciso criar mais um objeto.

solução!

No caso você esta utilizando a uma variável no mesmo endereço de memoria; No caso quando você passa um parâmetro na função ele passa somente a referencia desse objeto. no caso quando você muda o nome da variável empregado ele altera todas as referencias, com base no seu código você poderia criar um novo objeto após adicionar o empregado

//[...]
Funcionario empregado = new Funcionario();


    empregado.nome = "Marcelo";
    empregado.CPF = "486611";

    escola.adiciona(empregado);    

   //Adicionar essa linha
    empregado = new Funcionario();

    empregado.nome = "Thiago";
    empregado.CPF = "4616168";

    escola.adiciona(empregado);
//[...]

Velho, era isso que eu queria, uma forma de "RESETAR" o objeto.