import java.util.Iterator; class MängdenFullException extends Exception { } class Mängd { private final static int MAX_ELEMENT = 10; private Object[] elementen = new Object[MAX_ELEMENT]; private int antalElement = 0; public void läggTill(Object elementet) throws MängdenFullException { if (finns(elementet)) { // Elementet finns redan i mängden. Gör ingenting. } else if (antalElement >= MAX_ELEMENT) { throw new MängdenFullException(); } else { elementen[antalElement++] = elementet; } } // läggTill public void taBort(Object elementet) { // System.out.println("[taBort('" + (String)elementet + "']"); // System.out.println("[elementen="); // for (int x = 0; x < antalElement; ++x) // System.out.print("'" + elementen[x] + "',"); // System.out.println("]"); for (int i = 0; i < antalElement; ++i) { if (elementet.equals(elementen[i])) { for (int j = i; j < antalElement - 1; ++j) elementen[j] = elementen[j + 1]; --antalElement; return; } } // Elementet fanns inte i mängden. Gör ingenting. } // taBort public boolean finns(Object elementet) { for (int i = 0; i < antalElement; ++i) if (elementet.equals(elementen[i])) return true; return false; } public MängdIterator iterator() { return new MängdIterator(this, elementen, antalElement); } public MängdIterator bättreIterator() { return new BättreMängdIterator(this, elementen, antalElement); } } // Mängd class MängdIterator implements Iterator { protected Mängd mängden; protected Object[] elementen; protected int antalElement; protected int nästaElement = 0; public MängdIterator(Mängd mängden, Object[] elementen, int antalElement) { this.mängden = mängden; this.elementen = elementen; this.antalElement = antalElement; } public boolean hasNext() { return (nästaElement < antalElement); } public Object next() { return elementen[nästaElement++]; } public void remove() { throw new UnsupportedOperationException(); } } // MängdIterator class BättreMängdIterator extends MängdIterator { public BättreMängdIterator(Mängd mängden, Object[] elementen, int antalElement) { super(mängden, elementen, antalElement); } public void remove() { // Här ska man egentligen göra en del kollar, // till exempel att next() verkligen har anropats, // men det struntar vi i! mängden.taBort(elementen[nästaElement - 1]); --nästaElement; --antalElement; } } // BättreMängdIterator public class Uppgift5 { public static void main2(String[] args) { Mängd m = new Mängd(); for (int i = 1; i <= 5; ++i) { try { m.läggTill("Sträng " + i); } catch (MängdenFullException e) { System.err.println("Ojdå!"); } } for (Iterator i = m.iterator(); i.hasNext(); ) System.out.println("Ett element: " + i.next()); } public static void main(String[] args) { Mängd m = new Mängd(); for (int i = 1; i <= 5; ++i) { try { m.läggTill("Sträng " + i); } catch (MängdenFullException e) { System.err.println("Ojdå!"); } } System.out.println("Första loopen..."); for (Iterator i = m.iterator(); i.hasNext(); ) { System.out.println("Ett element: " + i.next()); } System.out.println("Första loopen igen..."); for (Iterator i = m.iterator(); i.hasNext(); ) { System.out.println("Ett element: " + i.next()); } System.out.println("Andra loopen..."); for (Iterator i = m.bättreIterator(); i.hasNext(); ) { System.out.println("Ett element: " + i.next()); } System.out.println("Tredje loopen..."); for (Iterator i = m.bättreIterator(); i.hasNext(); ) { System.out.println("Ett element: " + i.next()); i.remove(); } System.out.println("Fjärde loopen..."); for (Iterator i = m.iterator(); i.hasNext(); ) { System.out.println("Ett element: " + i.next()); } System.out.println("Femte loopen..."); for (Iterator i = m.bättreIterator(); i.hasNext(); ) { System.out.println("Ett element: " + i.next()); } } }