1
|
|
|
public class Aggregate {
public Iterator createIterator() {
return new Iterator( this );
}
// PRE: n >= 0
public int fib( int n ) {
if ( n < 2 )
return 1;
else
return fib( n - 2 ) + fib( n - 1 );
}
} |
|
|
|
|
public class Iterator {
private Aggregate aggregate;
private int position;
public Iterator( Aggregate aggregate ) {
this.aggregate = aggregate;
position = -1; // before first
}
public void next() {
position++;
}
public int current() {
return aggregate.fib( position );
}
} |
|
|
|
|
public class Main {
public static void main( String argv[] ) {
Aggregate aggregate = new Aggregate();
Iterator iterator = aggregate.createIterator();
for ( int i=0; i<10; i++ ) {
iterator.next();
System.out.println( iterator.current() );
}
}
} |
|
|
|
2
|
|
|
public class Node {
public int value;
public Node next;
} |
|
|
|
|
public class List {
private Node first;
public boolean empty() {
return first == null;
}
public Node getFirst() {
return first;
}
public void insert( int v ) {
Node n = new Node();
n.value = v;
if ( first == null ) {
first = n;
n.next = first;
} else {
n.next = first;
Node tmp;
for ( tmp = first; tmp.next != first; tmp = tmp.next ) ;
tmp.next = n;
first = n;
}
}
public void print() {
if ( first != null ) {
System.out.print( first.value + " " );
for ( Node tmp = first.next; tmp != first; tmp = tmp.next )
System.out.print( tmp.value + " " );
System.out.println();
}
}
} |
|
|
|
|
public class ListIterator {
private List list;
private Node current;
public ListIterator( List list ) {
this.list = list;
current = list.getFirst();
}
public int next() {
if ( current != null )
current = current.next;
return current();
}
public int move( int n ) {
for ( int i=0; i<n; i++ )
next();
return current();
}
public int current() {
if ( current != null )
return current.value;
else
return -1;
}
public int reset() {
current = list.getFirst();
return current();
}
public boolean atFirst() {
return current == list.getFirst();
}
} |
|
|
|
|
public class Main {
public static void main( String argv[] ) {
List list = new List();
list.insert( 5 );
list.insert( 3 );
list.insert( 7 );
list.insert( 1 );
list.print();
/*
* Beregne summen af elementerne
*/
ListIterator it = new ListIterator( list );
int sum = 0;
do {
sum += it.next();
} while ( !it.atFirst() );
System.out.println( "Sum: " + sum );
/*
* Udskrive hver anden af elementerne
*/
it.reset();
do {
System.out.println( it.current() );
it.move( 2 );
} while ( !it.atFirst() );
}
} |
|
|
|
3
|
|
|
package array;
public class Cursor {
private int pos;
protected Cursor( int pos ) {
setPos( pos );
}
protected void setPos( int pos ) {
this.pos = pos;
}
protected int getPos() {
return pos;
}
protected void incPos() {
pos++;
}
protected void decPos() {
pos--;
}
} |
|
|
|
|
package array;
public class ArrayAggregate {
private int[] array;
public ArrayAggregate( int[] array ) {
this.array = array;
}
public Cursor createCursor() {
return new Cursor( -1 );
}
public boolean next( Cursor cursor ) {
if ( cursor.getPos() + 1 < array.length ) {
cursor.incPos();
return true;
} else
return false;
}
public int current( Cursor cursor ) {
return array[ cursor.getPos() ];
}
} |
|
|
|
|
import array.*;
public class Main {
public static void main( String[] argv ) {
int[] list = { 2, 3, 5, 7, 11, 13, 17, 19 };
ArrayAggregate aggregate = new ArrayAggregate( list );
// Klient start
Cursor cursor = aggregate.createCursor();
while ( aggregate.next( cursor ) )
System.out.print( aggregate.current( cursor ) + " " );
System.out.println();
// Klient slut
}
} |
|
|
|
|
|
4
|
|
|
import array.*;
public class Adder implements IteratorMethod {
private int adder;
public Adder( int adder ) {
this.adder = adder;
}
public int operation( int value ) {
return value + adder;
}
} |
|
|
|
|
import array.*;
public class Decrementor implements IteratorMethod {
public int operation( int value ) {
return value - 1;
}
} |
|
| |