Iterator filtrujący

0

Chciałem rozwiązać następujące zadanie:
Skonstruuj iterator filtrujący udostępniający tylko co n-ty element spośród elementów zwracanych przez iterator oryginalny.
Moje rozwiązanie jest identyczne jak rozwiązanie zawarte w odpowiedziach w książce, jednak nie działa.

package iteration;

public class SkipIterator implements Iterator {
	// Iterator iterujący co n-ty element
	
	// Pola
	private final Iterator _iterator;
	private final int _skip;
	
	// Konstruktory
	SkipIterator(Iterator iterator, int skip) {
		_iterator = iterator;
		_skip = skip;
	}
	
	// Metody
	
	public void first() {
		_iterator.first();
		skipForward();
	}
	
	public void last() {
		_iterator.last();
		skipBackward();
	}
	
	public void next() {
		_iterator.next();
		skipForward();
	}
	
	public void previous() {
		_iterator.previous();
		skipBackward();
	}
	
	public boolean isDone() {
		return _iterator.isDone();
	}
	
	public Object current() {
		return _iterator.current();
	}
	
	private void skipForward() {
		for(int i = 0; i < _skip && !_iterator.isDone(); _iterator.next());
	}
	
	private void skipBackward() {
		for(int i = 0; i < _skip && !_iterator.isDone(); _iterator.previous());
	}
	
}
 

A tutaj klasa testująca:

package iteration;

public class Test {
	public static void main(String args[]) {
	String[] tab = new String[10];
	tab[0] = "A";
	tab[1] = "B";
	tab[2] = "C";
	tab[3] = "D";
	tab[4] = "E";
	tab[5] = "F";
	tab[6] = "G";
	tab[7] = "H";
	tab[8] = "I";
	tab[9] = "J";
	ArrayIterator it = new ArrayIterator(tab);
	SkipIterator sit = new SkipIterator(it, 2);
	
	System.out.println("Iteracja całej tablicy: ");
	it.first();
	while(!it.isDone()) {
		System.out.println(it.current());
		it.next();
	}
	
	sit.first();
	System.out.println("Iteracja co drugiego elementu: ");
	while(!sit.isDone()) {
		System.out.println(sit.current());
		sit.next();
	}
		
	}
}

Podejrzewam, że błąd znajduje się w klasie testującej.

1

Coś Ty za kod przysłał? Metoda next() w iteratorze musi zwracać obiekt. Klasy ArrayIterator nie ma w standardowych bibliotekach Javy.

0

Są to iteratory własne, nie z żadnych bibliotek.
Dzięki, że mnie uświadomiłeś, sam bym pewnie na to nie wpadł...

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