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.