package foo; | |
import java.util.Iterator; | |
/** | |
* the fibonacci series implemented as an Iterable. | |
*/ | |
public final class Fibonacci implements Iterable<Integer> { | |
/** the next and previous members of the series. */ | |
private int a = 1, b = 1; | |
@Override | |
public Iterator<Integer> iterator() { | |
return new Iterator<Integer>() { | |
/** the series is infinite. */ | |
public boolean hasNext() { return true; } | |
public Integer next() { | |
int tmp = a; | |
a += b; | |
b = tmp; | |
return a; | |
} | |
public void remove() { throw new UnsupportedOperationException(); } | |
}; | |
} | |
/** | |
* the n<sup>th</sup> element of the given series. | |
* @throws NoSuchElementException if there are less than n elements in the | |
* given Iterable's {@link Iterable#iterator iterator}. | |
*/ | |
public static <T> | |
T nth(int n, Iterable<T> iterable) { | |
Iterator<? extends T> it = iterable.iterator(); | |
while (--n > 0) { | |
it.next(); | |
} | |
return it.next(); | |
} | |
public static void main(String[] args) { | |
System.out.print(nth(10, new Fibonacci())); | |
} | |
} |