1
resposta

Imprimiu duas vezes último objeto Funcionário.

Gostaria de saber porque ,no meu exemplo, foi impresso duas vezes o ultimo objeto Funcionários.

public class Empresa {
        String nome;
        String cpf;
        String diretor;
        Funcionario[] funcs;

        void adicionaEmpregado(Funcionario f){
            int i=0;
            for (i=0;i<this.funcs.length;i++){
                if (this.funcs[i]==null){
                    this.funcs[i]= new Funcionario();
                    this.funcs[i].nome=f.nome;
                    this.funcs[i].departamento=f.departamento;
                    this.funcs[i].salario=f.salario;
                    this.funcs[i].dataentrada=f.dataentrada;
                    //i=this.funcs.length;
                    return;
                }
            }
        }
        void mostraEmpregados(){
            for (int i = 0; i < this.funcs.length; i++) {
                if (this.funcs[i] != null) {
                    System.out.println("-Funcionário na posição: " + i);
                    // preencher para mostrar outras informacoes do funcionario   
                    System.out.println(".Nome:" + this.funcs[i].nome);
                    System.out.println(".Salario:" + this.funcs[i].salario);
                }
            }
        }

}


public class TestaEmpresa {
            public static void main(String [] args){
                Empresa empresa=new Empresa();
                empresa.funcs = new Funcionario[5];

                empresa.nome="XYZ Informática";
                empresa.cpf="11111111111111";
                empresa.diretor="João Batista";


                Funcionario f1=new Funcionario();
                empresa.funcs[0]=f1;

                f1.nome="Abraao";
                f1.departamento="RH";
                f1.rg="1234";
                f1.dataentrada="01/01/2001";
                f1.salario=1500;

                empresa.adicionaEmpregado(f1);


                Funcionario f2=new Funcionario();
                empresa.funcs[1]=f2;

                f2.nome="Beto";
                f2.departamento="Serviços";
                f2.rg="5678";
                f2.dataentrada="02/02/2002";
                f2.salario=2000;               

                empresa.adicionaEmpregado(f2);

                /*for (int i=0;i<2;i++){
                    Funcionario f=new Funcionario();
                    f.salario=1000 + i * 100;
                    empresa.adicionaEmpregado(f);
                }*/

                //System.out.println("Empresa:" + empresa.nome + "; Funcionário:" + empresa.funcs[0].nome);
                //System.out.println(empresa.funcs[].nome);
                empresa.mostraEmpregados();

            }

}

RESULTADO: -Funcionário na posição: 0 .Nome:Abraao .Salario:1500.0 -Funcionário na posição: 1 .Nome:Beto .Salario:2000.0 -Funcionário na posição: 2 .Nome:Beto .Salario:2000.0

1 resposta

Oi Marcelo, tudo bem ?

Cara você está adicionando várias duas na listagem.

  • Através da própria referencia da lista : empresa.funcs[1]=f2;
  • Através do método adiciona : empresa.adicionaEmpregado(f2);

Basta corrigir isso.

Abraços