Java iterators examples: solution for Fibonacci iterator.

This is the solution we wrote in class.


import java.util.Iterator;
import java.util.NoSuchElementException;

public class IterableFibonacci implements Iterable<Integer> {
	private int maxIndex;

	/**
	 * Creates a new IterableFibonacci
	 * 
	 * @param maxIndex
	 *            -- the index of the last Fibonacci number returned in this
	 *            sequence
	 * @throws IllegalArgumentException
	 *             if maxIndex < 0
	 **/
	public IterableFibonacci(int maxIndex) {
		if (maxIndex < 0) {
			throw new IllegalArgumentException("Invalid index for Fibonacci"
					+ "sequence: " + maxIndex);
		}
		this.maxIndex = maxIndex;
	}

	/**
	 * sets the maximal index in this Fibonacci sequence
	 * 
	 * @param newMax
	 *            -- the new value of the maximum index in this sequence
	 * @throws IllegalArgumentException
	 *             if newMax < 0
	 **/
	public void setMaxIndex(int newMax) {
		if (newMax < 0) {
			throw new IllegalArgumentException("Invalid index for Fibonacci"
					+ "sequence: " + newMax);
		}
		maxIndex = newMax;
	}

	/**
	 * Returns an iterator that produces the sequence of Fibonacci numbers from
	 * index 0 to the maximum index (inclusive)
	 **/
	public Iterator<Integer> iterator() {
		return new FibonacciIterator();
	}

	private class FibonacciIterator implements Iterator<Integer> {
		// two latest fibonacci numbers:
		private int fib1 = 0;
		private int fib2 = 1;
		private int count = 0;

		/**
		 * @return - true if there are more elements in the sequence, false
		 *         otherwise
		 **/
		public boolean hasNext() {
			return (count < maxIndex); 
		}

		/**
		 * @return - the next Fibonacci number in the sequence
		 * @throws -- NoSuchElementException if there are no more elements
		 **/
		public Integer next() {
			if (hasNext()) {
				int current = fib1;
				fib1 = fib2;
				fib2 = fib1 + current;
				count++;
				return current;
			} else {
				throw new NoSuchElementException();
			}
		}

		/**
		 * method not supported
		 **/
		public void remove() {
			throw new UnsupportedOperationException();
		}
	}
}

Testing code for Fibonacci iterator.


import java.util.Iterator;

public class TestIterable {
    public static void main(String [] args) {
	// an iterator that produces up to n-th fibonacci numbers (start at 0)
	IterableFibonacci fibNumbers = new IterableFibonacci(15);

	System.out.println("Fibonacci numbers up to n = 15");
	for (int fib: fibNumbers) {
	    System.out.println(fib);
	}
	
	System.out.println("Fibonacci numbers up to n = 10");
	fibNumbers.setMaxIndex(10);
	for (int fib: fibNumbers) {
	    System.out.println(fib);
	}
	
    }
}

CSci 2101 course web site.

The views and opinions expressed in this page are strictly those of the page author. The contents of this page have not been reviewed or approved by the University of Minnesota.