Wyciąganie elementu klasy z iteratora.

0

Witam, mam pewien problem
Mam taką klasę:

public class Point
{
double x;
double y;

public Point(Double X, Double Y) 
	{
		x = X;
		y = Y;
	}
}

w programie robię listę, a potem dodaję do niej jakieś elementy typu Point:

ArrayList<Point> arrayList = new ArrayList<Point>();

Tworzę listę z wynikami, iterator do pierwszej listy oraz pomocnicze obiekty typu Point

ArrayList<Point> arrayListScore = new ArrayList<Point>();
Iterator<Point> i = arrayList.iterator();
Point point = new Point(0.0, 0.0);
Point pointNastepny = new Point(0.0, 0.0);
Point pointDoZapisu = new Point(0.0, 0.0);

Poruszam się po liście arrayList pętlą while, niby kompilator akceptuje to ale wyświetla mi błąd w programie gdy już coś dodam:

Błąd: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.ArrayList$Itr cannot be cast to Point

while(i.hasNext())
{
	point = (Point) i;
	pointNastepny = (Point) i.next();
	
	if(point.x > 0 && pointNastepny.y>0)
	{
		pointDoZapisu.x = point.x;
		pointDoZapisu.y = pointNastepny.y;
	}
}

Nie wiem co robię źle w tej pętli while, mógłby mnie ktoś nakierować? Jakie tak naprawdę informacje niesie ze sobą iterator, bo chyba źle go zrozumiałem.
Jeszcze chciałbym się zapytać jak w pętli while zacząć od konkretnego iteratora.

0
point = (Point) i;

i to iterator więc nie możesz go rzutować na Point. Aby pobrać obiekt musisz użyć:

point = i.next();
0

A to

point = i.next();

Nie zwraca kolejnego kolejnego obiektu? Tak jakby w uproszczeniu obiektu i+1?

A jak mam zrobić, żeby pobrać obiekt na który jest iterator i kolejny iterator tak jak napisałem wyżej?

1

next() to w pewnym sensie obecny obiekt, czyli i, aby pobrać kolejny wystarczy wywołać to jeszcze raz.

Point point = i.next();
Point next = i .next();
0

Tego to nie wiedziałem, dzięki.

A jeszcze chciałem się zapytać czy da się zacząć pętle while od konkretnego iteratora?

2

A nie możesz zastąpić tego pętlą for?

Point pointToSave;
for(int i = 0; i < points.size() - 1; i++)
{
    Point point = points.get(i);
    Point next = points.get(i + 1);

    if(point.x > 0 && next.y > 0)
    {
        pointToSave = new Point(point.x, next.y);
    }
}

W tej pętli inkrementacja jest o jeden, co oznacza że w drugiej iteracji pętli point będzie tym samym co next z poprzedniej iteracji.

0

No rzeczywiście mogę i to rozwiązanie chyba nawet lepsze będzie.
Jeszcze raz wielkie dzięki :)

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