FR, crie apenas um tópico para postar sua dúvida tudo bem?
Já removi o outro tópico criado, pois não havia nenhuma resposta.
Quando ao seu código, não dá para usar um foreach para o que você precisa, ou seja, em determinada posição do array, atribuir um Funcionário.
O foreach é usado apenas para iterar pela coleção e usar cada elemento contido nela, e não modificá-la entendeu?
[]'s
F
FR1
David, desculpa ter criado um tópico duplicado, não foi minha intensão. Quando eu criei o primeiro veio um erro do fórum, pensei :“droga vou ter que fazer tudo de novo”. Daí eu criei outro. Não vai acontecer outra vez.
Cara, entendi perfeitamente! Não tem como percorrer o this.funcionarios[i] e atribuir uma referência usando o “i” pq senão vai dar erro de tipo.
Muito obrigado! Se puder marque como resolvido. vlw!
F
FR1
David, você disse que quando se usa o foreach não se pode atribuir um valor a variável que está iterando.
classEmpresa {
Stringnome, cnpj;
Funcionario[] funcionarios;
voidadmite(Funcionariof) {
for (Funcionarioi : this.funcionarios) {
if (i == null) {
i = f;
return;
}
}
}
}
classTestaEmpresa{publicstaticvoidmain(String[]args){EmpresaminhaEmpresa=newEmpresa();minhaEmpresa.funcionarios=newFuncionario[2];Funcionariof1=newFuncionario();//considere que todos os atributos de f1 foram preenchidos aqui;minhaEmpresa.admite(f1);}}
Eu aceitei o que você disse como se fosse uma regra, mas eu ainda não entendo o porque.
Porque eu não posso atribuir o f (que tem o endereço do objeto já criado “f1”) em i (que está se referindo ao objeto na posição 0 da array)?
Andersonrms
O seu código está dando algum erro?
Pq ele parece estar certo. (Tirando o fato d vc estar criando um novo array redundantemente na classe de teste, e q vc poderia usar uma List e o método add)
F
FR1
o código simplesmente não atribui “f” ao “i”. O David disse que o foreach (enhanced for) não permite isso, mas eu não consigo entender porque. Já que o “f” e o “i” são do mesmo tipo e o “i” está apontando para o objeto naquele array.
ahh, eu tirei aquela redundância que você disse.
Andersonrms
Eu acho q eu entendi o q acontece.
Acho q essa variável i é uma variável local q está apenas no escopo do for each, que não muda o valor da variável de referência que está no Array.
Bom, eu faria dessa forma:
O que você disse em relação a ser uma variável só do escopo faz sentido.
Mas se imprimir só o “i” ao invés de “i.nome” (desse jeito: System.out.println(i)), o java mostra na tela o endereço da memória onde está alocado o objeto que o “i” está apontando, exemplo: @12dacd1
Andersonrms
Vamos tentar analisar o funcionamento do seu for each.
É criada uma variável de iteração, q receberá o valor das variáveis q estão no array ou na lista, cada valor d cada vez (por iteração) é lógico.
Caso a variável do array seja null você atribuirá o valor da variável passada como argumento à sua variável de iteração. Nesse ponto q o funcionamento pode ser confuso. Você não está atribuindo o valor passado como argumento à variável do array, mas sim à variável de iteração. Ou seja, você não consegue mudar o valor das variáveis do array pelo for each.
O q você consegue fazer é mudar o estado dos objetos que são referenciados pelas variáveis do array. Por exemplo, se o valor da variável do array não for null, a variável do array e a variável de iteração farão referência ao mesmo objeto, sendo assim, se você mudar o nome do funcionário da variável de iteração, por exemplo, o nome do funcionário da variável do array também será mudado.
Acho q ficou meio confusa a minha resposta, mas acho q é mais ou menos isso. rsrs
F
FR1
Você está correto. Demorei pra entender isso (droga!!). Cara muito obrigado mesmo pela paciência.