Podstawowe for loop vs ulepszczone for loop

0

Witam!
Wyjaśni ktoś może poniższy kod

  int[] ints = {1,2,3}; 
  for(int i : ints) { 
   System.out.println(i); 
   i = 0; 
  for(int i : ints)  
   System.out.println(i); 
  } 

Program wypisze:
1
2
3
1
2
3

  1. dlaczego i=0 w tej pętli nie zmiania wartości iteratorara?
0

Bo i tutaj to nie iterator, a wartość z tablicy. Podmieniasz więc zawartość zmiennej trzymającej wartość z tablicy.

W pętli for-each w Javie nie masz w ogóle dostępu do indeksu w tablicy ani do iteratora przy iterowaniu po kolekcjach.

0

Czyli
w pierwszym for mamy:
i=1
i=2
i=3
tak?
Jeśli tak to w tej pętli mamy jeszcze i = 0; czyli zmienia kazdą wartość z tablicy na 0 tj.:
i=1 => i=0
i=2 => i=0
i=3 => i=0
I wtedy tablica wygląda tak: ints = {0,0,0};
Ale chyba coś żle zrozumiałem bo po tej petli jest

for(int i : ints)  
   System.out.println(i); 
  } 

wypisuje
1
2
3

1

Przecież tam nie ma zapisu do tablicy. Zapisujesz do osobnej zmiennej, która jest widoczna tylko w for-eachu. Jeśli masz dodatkowe i poza for-eachem to to wewnętrzne przysłoni ci to zewnętrzne (to dodatkowe).

Zmienna i jest po prostu lokalną zmienną inicjowaną na kolejne elementy tablicy w kolejnych iteracjach pętli. To co zrobisz z tą zmienną nie wpływa na zawartość tablicy.

for (typ v : tablica) {
  // jakiś kod
}

to mniej więcej to samo co:

for (int ukrytyIndeks = 0; ukrytyIndeks < tablica.length; ukrytyIndex++) {
  typ v = tablica[ukrytyIndeks];
  // jakiś kod
}

Do ukrytego indeksu, jak sama nazwa sugeruje, nie masz dostępu podczas korzystania z for-eacha.

1 użytkowników online, w tym zalogowanych: 0, gości: 1