// Must compile with "javac -source 1.4 SimpleSet.java" class SimpleSetFullException extends Exception { } public class SimpleSet { final int MAX_MEMBERS = 3; Object[] content = new Object[MAX_MEMBERS]; public class SimpleSetIterator implements java.util.Iterator { private int currentPosition = 0; final Object[] content; public SimpleSetIterator(SimpleSet s) { content = s.content; } public boolean hasNext() { return currentPosition < MAX_MEMBERS && content[currentPosition] != null; } public Object next() { return content[currentPosition++]; } public void remove() { throw new UnsupportedOperationException(); } } // class SimpleSetIterator public java.util.Iterator iterator() { return new SimpleSetIterator(this); } public boolean contains(Object o) { for (int i = 0; i < MAX_MEMBERS; ++i) if (content[i] != null && content[i].equals(o)) return true; return false; } boolean add(Object o) throws SimpleSetFullException { if (contains(o)) return false; for (int i = 0; i < MAX_MEMBERS; ++i) { if (content[i] == null) { content[i] = o; return true; } } throw new SimpleSetFullException(); } public static void main(String[] args) { System.out.println("Testing SimpleSet"); SimpleSet s = new SimpleSet(); Point p1 = new Point(1, 2); Point p2 = new Point(2, 3); Point p3 = new Point(3, 4); Point p4 = new Point(4, 5); Point p5 = new Point(1, 2); assert s.contains(p1) == false; assert s.contains(p2) == false; assert s.contains(p3) == false; assert s.contains(p4) == false; assert s.contains(p5) == false; try { assert s.add(p1) == true; assert s.add(p1) == false; } catch (SimpleSetFullException ssfe) { assert false; } assert s.contains(p1) == true; assert s.contains(p2) == false; assert s.contains(p3) == false; assert s.contains(p4) == false; assert s.contains(p5) == true; try { assert s.add(p2) == true; assert s.add(p2) == false; } catch (SimpleSetFullException ssfe) { assert false; } assert s.contains(p1) == true; assert s.contains(p2) == true; assert s.contains(p3) == false; assert s.contains(p4) == false; assert s.contains(p5) == true; try { assert s.add(p3) == true; assert s.add(p3) == false; } catch (SimpleSetFullException ssfe) { assert false; } assert s.contains(p1) == true; assert s.contains(p2) == true; assert s.contains(p3) == true; assert s.contains(p4) == false; assert s.contains(p5) == true; try { s.add(p4); assert false; } catch (SimpleSetFullException ssfe) { } assert s.contains(p1) == true; assert s.contains(p2) == true; assert s.contains(p3) == true; assert s.contains(p4) == false; assert s.contains(p5) == true; java.util.Iterator i = s.iterator(); int n = 0; while (i.hasNext()) { Point p = (Point)i.next(); assert p != null; ++n; } assert n == 3; System.out.println("SimpleSet ok"); } } // class SimpleSet