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

Retornar mais de um valor

Amigos

Bom dia,

Criei um método para pegar todos os funcionarios do meu array. Utilizei este método no meu outro método de adicionar os funcionarios na empresa. O objetivo era adicionar todos os funcionarios criados de uma vez só. Mas ele só retorna o primeiro funcionario do array. E consequentemente só adiciona o primeiro. Existe alguma forma de retornar mais de um funcionario?

    public Funcionario geral(){
        for(int i = 0; i < grupo.length; i++){
            if(grupo[i].nome == null)continue;
                   return grupo[i];
        }
        return null;
    }
9 respostas

Bom dia Vitor,

No caso do método que você criou, ele irá pegar o seu array grupo e verificar, em toda a sua extensão se se grupo[i].nome é nulo, se for ele continua varrendo o array, caso contrário ele não entra no if e retorna o primeiro que encontrar, no seu caso o primeiro item já não é nulo e com isso ele já retorna o valor dele.

Para retornar mais de um dado você pode criar um outro array do mesmo tipo do grupo, e no lugar do return você fazer a atribuição

outroArray[j] = grupo[i]

para isso você terá que trabalhar a variável "j", inicializando ela em 1 e ir incrementando cada vez que fizer uma atribuição, também há outros pontos a serem trabalhados, como o return, por exemplo.

Há outras maneiras de implementar essa solução, essa foi uma que pensei rapidamente aqui.

Espero ter ajudado

Joel, inicialmente obrigado pelo comentário.

Seguindo a sua sugestão, no caso do outroArray[j] como eu retornaria o valor de outroArray[0] e outroArray[1] no mesmo método ?

Por nada,

No caso você iria atribuindo o valor e após executar todo o loop você retornaria o array inteiro

return outroArray;

e deve preparar o local onde você esta chamando para receber esse array, e lá trabalhar com ele.

Não funciona desta forma, pq o método é do tipo Funcionario. Se eu criar um outroArray do mesmo tipo do grupo, ou seja, Funcionario[], ele reclama pois nao posso retornar Funcionario[] no método do tipo Funcionario.

    Funcionario[] grupo; 
    private int senha;
    Empresa empresa;

    public Funcionario geral(){
        for(int i = 0; i < grupo.length; i++){
            if(grupo[i].nome == null)continue;
                return grupo[i];
        }
        return null;
    }

Sim, para isso você terá que ajustar o seu método para retornar o tipo que você precisa. No caso um array de Funcionários

public Funcionario[]  geral()

Terá que ser feitos vários ajustes para funcionar pois antes você retornava 1 valor, agora está tentando retornar todos.

Joel, fazendo isso, como eu configuro o meu método adiciona abaixo para receber um array e não um funcionario ?

    public void adiciona(Funcionario f1) {
        this.funcionarios[livre] = f1;
        ++livre;
    }
solução!

Tem várias formas de fazer isso, uma delas pode ser algo desse tipo:

public void adiciona(Funcionario[]  f1) {
        this.funcionarios = f1;
    }

Mas tá bem pode ser algo desse tipo:

public void adiciona(Funcionario[]  f1) {
       Loop por funcionário f1 
                this.funcionarios[livre] = f1;
                ++livre;
       Fim 
    }

Cada uma tem uma peculiaridade, creio que talvez a segunda forma é melhor para você.

Joel obrigado,

acabei desistindo rsrsrs.

Na verdade implementei um "for adiciona". Desta forma eu adiciono todos os funcionarios[i]. Em vez de receber todos no Array sacou. Por que assim, pensei melhor, não é certo criar um método para retornar todos os analistas na classe analista e utilizar este método para inclui-los na classe empresa. É mais coerente, utilizar uma outra classe, por exemplo RH, onde adiciono os analistas contratados na empresa. Nesta classe eu gerencio quem esta contratado, quem é da empresa ou não. Deixo a classe analista somente como extends do funcionario, e nela eu defino bonus, área, enfim, outras particularidades.

Muito obrigado pela ajuda meu amigo !!!

Olá Vitor, espero ter te ajudado um pouco, mas essas coisas acontecem, as vezes queremos alterar uma coisa é no fim essa alteração é muito maior do que imaginamos, e impacta diversos lugares.

De nada e boa sorte nos estudos.