Enhanced-for

4 respostas
lucas_mnzs

Galera, estou tentando entender a idéia do Enhanced-for explicado na apostila FJ-11 da caelum. Para mim a idéia está muito implícita ainda. Ele dá o exemplo abaixo e diz que assim (com o enhanced-for) não precisamos mais usar o atributo length e nem manter uma variável de índice pro array, mas pelo que eu entendi ele declara uma variável do tipo int x que funciona como o índice do for convencional, sendo que tem um índice para cada posição do array. Parece a mesma coisa não?? A diferença seria na economização de código??

void imprimeArray(int[] array) {

     for (int x : array) {
            System.out.println(x);
     }
}

4 Respostas

maquiavelbona

Não, o enhanced-for é uma facilitação para um vetor ou Collection para iterá-lo. Se por exemplo tivesse:

String[]  nomes = getNomesDoInferno();

O enhanced-for para isso seria:

for( String nomeEmQuestao: nomes){ rotinaQueFazAlgo(nomeEmQuestao);
Ele não devolve os índices, mas sim os objetos ou variáveis dentro do conjunto de dados que você passou. Como o exemplo foi com int, pareceu que ele faz o que disseste.

Até!

lucas_mnzs

Putz, pode crer.

Então pra fechar e ver se eu entendi. Para cada nome retornado pelo seu getNomesdoInferno, ele joga pra nomeEmQuestão e faz o que tu determinar?

Valeu cara!

CrOnNoS

Essa variável "x" que você falou funcionar como índice, não é isso.
Primeiramente você precisa entender que esse for serve para LER os dados de um vetor apenas (já verá o porque).

O funcionamento desse for é pegar um vetor, array por exemplo, e iterar por ele passando o valor em cada posição para a variável a esquerda.

No seu exemplo:
void imprimeArray(int[] array) {  
  
     for (int x : array) {  
            System.out.println(x);  
     }  
}

O vetor que vai ser lido é o array, indicado na direita após o ':', e a cada iteração, o valor vai ser enviado para "x".
Supondo que array = { 1, 2, 10};

primeira iteração: x = 1
segunda iteração: x = 2
terceira iteração: x = 10
fim do vetor, sai do for

Como você pôde ver, você não tem nenhuma variável que diz algo sobre o índice atual. Ou seja, você não pode usar esse for para escrever dados pois você não tem um índice para poder usar, por exemplo: array[indice] = x;

Mas o for em si é só para economizar código mesmo.

lucas_mnzs

Tá perfeito caras. Valeu!

Criado 11 de agosto de 2009
Ultima resposta 11 de ago. de 2009
Respostas 4
Participantes 3