Hab volgendes Problem, das n kann ich nicht benutzen, da steht dann immer:
cannot refer to the non-final local variable defined in an enclosing scope. Leider darf ich bei der der Methodensignatur nicht das n auch noch auf final setzen.
Wie löse ich das also?
Code:
/**
* Returns an iterator that enumerates every n-th element in the collection,
* starting with the first element.
*
* @param n
* the number of skipped elements+1.
* @return the iterator.
* @throws IllegalArgumentException
* if n is less than 1.
*/
@Override
public Iterator<T> skippingIterator(int n) {
if (n < 1) {
throw new IllegalArgumentException();
} else {
Iterator<T> it = new Iterator<T>() {
private int index = 0;
private int size = list.size() - 1;
@Override
public T next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
int j = index + n;
return list.get(j);
}
@Override
public boolean hasNext() {
return index < size && list.get(index) != null ;
}
};
return it;
}
}
Aber ich sollte auf die Frage antworten....... Du kriegst den Wert nicht da rein, solange du anonyme innere Klasse verwendest - und wenn du diese nicht verwendest, kannst du sie nicht innerhalb der Methode schreiben.
Okay, in Interfaces ist es ja so, dass alle Attribute statisch und final sind, also hab ich jetzt doch zu final gewechselt. Was sind da für Fehler drin?
staticclassModLinkedList<E>extendsLinkedList<E>{publicIterator<E>skippingIterator(finalint n){finalIterator<E> it =super.iterator();returnnewIterator<E>(){@OverridepublicbooleanhasNext(){return it.hasNext();}@OverridepublicEnext(){E e = it.next();for(int i =1; i < n; i++){if(it.hasNext())
it.next();else
i = n;}return e;}};}}publicstaticvoidmain(String[] args){ModLinkedList<String> nwmll =newModLinkedList<>();
nwmll.add("Hallo");
nwmll.add("du");
nwmll.add("da!");for(Iterator<String> it = nwmll.skippingIterator(1); it.hasNext();){String next = it.next();System.out.println(next);}System.out.println("");for(Iterator<String> it = nwmll.skippingIterator(2); it.hasNext();){String next = it.next();System.out.println(next);}}
Dann ist es Rumgeschubse mit i/index.
Aber streng nach der Vorgabe geht es ohne final nicht.
Spreche doch mal deinen Dozenten an, dass seine Aufgabe nicht realisierbar ist. Vorsichtig Umgangston.
Ach so, dieses nw (Präfix) steht für nicht wichtig. (Falls sich jemand wundert)
Aber streng nach der Vorgabe geht es ohne final nicht.
Spreche doch mal deinen Dozenten an, dass seine Aufgabe nicht realisierbar ist. Vorsichtig Umgangston.
Ernsthaft? Nichts davon ist für irgendwas eine Begründung und das einzige final was man da findet ist NICHT nötig. Willst du nicht mal woanders trollen gehen?