Wątek przeniesiony 2017-06-10 10:07 z Java przez bogdans.

Niepoprawne przesuwanie się Iteratora w pętli

0

Witam,
mam problem z Iteratorem HashSetu, otoz kiedy iteruje po mojej kolekcji wypisując po prostu jej zawartość, wszystko gra.
Problem sie pojawia, kiedy chce wypisać tylko konkretne wartości, sprecyzowane w odpowiednim if-ie, wtedy iterator jakby "przesuwa" się o pozycje dalej
Utworzyłem klasę Czlowiek, ktora zawiera pola Imie i Nazwisko. Kiedy chce wypisac tylko ludzi z imieniem "Jan", kiedy iterator wykryje Jana, wypisuje osobe kolejną zamiast jego. Macie pomysly w czym problem? Załączam kod:

```java
Set<Czlowiek> ludzie = new HashSet<>();
Czlowiek o1 = new Czlowiek("Jan", "Kowalski");
Czlowiek o2 = new Czlowiek("Maria", "Nowak");
Czlowiek o3 = new Czlowiek("Anna", "Lewandowska");
ludzie.add(o1);
ludzie.add(o2);
ludzie.add(o3);
Iterator<Czlowiek> i = ludzie.iterator();
while(i.hasNext())
{
Czlowiek x = i.next();
if(x.get.Imie() == "Jan")
{
System.out.println(i.next()); //wypisuje "Maria"
}
}

</code></code>
Probowalem zamiasat while'a zrobić for'a, lecz rezultat podobny.
1

skoro next to next. Zachowuje się tak jak napisałeś.
Ale może chciałeś:
System.out.println(x); //i teraz nie wypisze "Maria"

0

1.Do porównywania obiektów używa się equals nie '=='.
2.No i co w tym dziwnego? Przeciez wywołujesz next a next zwraca następny iterator?

0

W takim razie czemu pętla bez warunku, normalnie wypisuje wszystko po kolei? Przeciez next() zwraca obiekt wskazywany przez iterator

0

Nie tylko. next() zwraca obiekt wskazywany i PRZESUWA iterator do nastepnej pozycji.
Czyli mimo, że w x masz "Jan" to iterator wskazuje już na "Maria".

0

Racja, dziękuje za pomoc!

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