Resultado de For aprimorado

5 respostas
L

Bom dia pessoal, este é o meu primeiro post aqui, acompanho o fórum a muito tempo. Nunca trabalhei com Java porém foi amor a primeira vista.
Estou estudando para a certificação desde o ano passado, ja li o livro da kathy 3x e agora to na fase de códigos e testes.

Estou nesse momento usando o Inquisition e estou neste código:

int []arr = {1,2,3,4};

for ( int i : arr )

{

arr[i] = 0;

}

for ( int i : arr )

{

System.out.println(i);

}

Saída : 0 0 3 0

Bem pessoal peço mil perdões se estiver sendo muito bobo de não enxergar algo óbvio neste código, porém não entendi o porque desta saída.
Pra mim no segundo for aprimorado achei que ele fosse imprimido os índices que o for estivesse no momento.
Alguém poderia me ajudar a entender esta saída detalhadamente pra não cair nesse erro novamente?

Não sei como vocês editam as mensagens para aparecer o código numerado etc, se puderem também dar essa dica eu agradeço. É um grande prazer estar aqui com o pessoal do fórum. Valeu :roll:

5 Respostas

T

O “enhanced for” do Java é diferente do “for (… in …)” do Javascript.

No Javascript, a variável contém o valor do índice. Funciona assim:

for (var i in arr) {
    alert (arr [i]);
}

No Java, a variável contém o valor da coisa indexada. Funciona assim:

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

Para você nunca se confundir, não use o nome “i”, “j”, etc. no ‘enhanced for’, para você não confundir com o ‘for’ normal (onde o que varia é o índice) nem com o ‘for in’ do Javascript.

L

thingol:
O “enhanced for” do Java é diferente do “for (… in …)” do Javascript.

No Javascript, a variável contém o valor do índice. Funciona assim:

for (var i in arr) {
    alert (arr [i]);
}

No Java, a variável contém o valor da coisa indexada. Funciona assim:

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

Para você nunca se confundir, não use o nome “i”, “j”, etc. no ‘enhanced for’, para você não confundir com o ‘for’ normal (onde o que varia é o índice) nem com o ‘for in’ do Javascript.

Obrigado pela resposta, pelo que entendi a variável não armazena o índice, e ainda não peguei o que é o valor da “coisa indexada”.
Poderia me detalhar porque a saída foi 0 0 3 0 ?
Grato

T

Mudei um pouco o seu programa, só para você ver. O meu programa é equivalente ao seu, mas mudei alguns nomes de variáveis para tirar um pouco de confusão da sua cabeça. Rode-o para entender melhor.

class EnhancedFor {
    public static void main(String[] args) {
        int []arr = {1,2,3,4};
        System.out.println ("--- Percorrendo o array pela primeira vez ---");
        int p = 0;  
        for ( int x : arr ) {
            System.out.println ("arr[" + p + "]=" + arr[p] + "; x = " + x);
            System.out.println ("valor anterior de a[" + x + "] = " + arr[x]);
            arr[x] = 0;
            System.out.println ("valor posterior de a[" + x + "] = " + arr[x]);
            System.out.println ();
            p++;
        }
        System.out.println ("--- Percorrendo o array pela segunda vez ---");
        for ( int i : arr ) {
            System.out.println(i);
        }
        System.out.println ("--- Fim ---"); 
    }
}

A saída dele é:
— Percorrendo o array pela primeira vez –
arr[0]=1; x = 1
valor anterior de a[1] = 2
valor posterior de a[1] = 0

arr[1]=0; x = 0
valor anterior de a[0] = 1
valor posterior de a[0] = 0

arr[2]=3; x = 3
valor anterior de a[3] = 4
valor posterior de a[3] = 0

arr[3]=0; x = 0
valor anterior de a[0] = 0
valor posterior de a[0] = 0

— Percorrendo o array pela segunda vez —
0
0
3
0
— Fim —

R

lfelipelias seja bem vindo ao guj.

int []arr = {1,2,3,4}; for (var i : arr) { arr[i] = 0; }
acompanhe a seguinte sequência. quando vc entra no for o primeiro valor de i = 1, então o array arr[1] = 0 (linha 3) alterando o array que fica com os seguintes valores {1,0,3,4}.
Na próxima iteração o valor que a variável i pegará será 0 (i=0) alterando o array arr[0] = 0, nosso arr ficará assim agora {0,0,3,4}.
A próxima iteração o valor de i = 3, setando 0 para arr[3], atualizando o arr ficará com os valores {0,0,3,0}.
A última iteração o valor de i = 0, arr[0] = 0, nosso arr ficará com os seguintes valores {0,0,3,0}.

Bem, acredito que isso responde tua dúvida.
Ah! quanto a por o código no formato basta por entre colchete a palavra code e fechar assim [/code].

L

rdfmartins:
lfelipelias seja bem vindo ao guj.

int []arr = {1,2,3,4}; for (var i : arr) { arr[i] = 0; }
acompanhe a seguinte sequência. quando vc entra no for o primeiro valor de i = 1, então o array arr[1] = 0 (linha 3) alterando o array que fica com os seguintes valores {1,0,3,4}.
Na próxima iteração o valor que a variável i pegará será 0 (i=0) alterando o array arr[0] = 0, nosso arr ficará assim agora {0,0,3,4}.
A próxima iteração o valor de i = 3, setando 0 para arr[3], atualizando o arr ficará com os valores {0,0,3,0}.
A última iteração o valor de i = 0, arr[0] = 0, nosso arr ficará com os seguintes valores {0,0,3,0}.

Bem, acredito que isso responde tua dúvida.
Ah! quanto a por o código no formato basta por entre colchete a palavra code e fechar assim [/code].

Matou perfeitamente minha dúvida amigo!
Muito obrigado ficarei com esse exemplo pra futuras referencias… fiz o teste de mesa meio rápido 2 vezes e cheguei no resultado com sucesso…
Valeu!

Criado 8 de julho de 2009
Ultima resposta 8 de jul. de 2009
Respostas 5
Participantes 3