1 // IntList.java
2 package staticnested;
3
4 import java.util.NoSuchElementException;
5
6 /** 7 * IntList verwaltet ganze Zahlen als Liste. 8 * Beispielprogramm zur Programmiertechnik 1, Teil 4. 9 * @author H.Drachenfels 10 * @version 17.7.2024 Variante mit statisch eingebetteter Iterator-Klasse 11 */
12 public final class IntList {
13 private Element head;
14
15 /** 16 * Legt eine leere Liste an. 17 */
18 public IntList() {
19 this.head = null;
20 }
21
22 /** 23 * Fügt eine Zahl am Listenanfang ein. 24 * @param n die einzufügende Zahl 25 * @return die Liste 26 */
27 public IntList insert(int n) {
28 this.head = new Element(this.head, n);
29 return this;
30 }
31
32 /** 33 * Element speichert eine einzelne Zahl als Teil einer Liste. 34 * Beipiel für eine statisch eingebettete Klasse. 35 */
36 private static final class Element {
37 private final Element next;
38 private final int n;
39
40 private Element(Element e, int n) {
41 this.next = e;
42 this.n = n;
43 }
44 }
45
46 /** 47 * Iterator speichert den aktuellen Zustand einer Listeniteration. 48 * Beipiel für eine innere Klasse, 49 * hier mit einer statisch eingebetteten Klasse nachgebildet. 50 */
51 public static final class Iterator {
52 private final IntList list; // ersetzt IntList.this
53 private Element current;
54
55 /** 56 * Baut einen Iterator für eine Liste. 57 * @param list die Liste, über die iteriert werden soll 58 */
59 public Iterator(IntList list) {
60 this.list = list;
61 this.current = this.list.head;
62 }
63
64 /** 65 * prüt, ob das Listenende erreicht ist. 66 * @return false, wenn das Listenende erreicht ist, sonst true. 67 */
68 public boolean hasNext() {
69 return this.current != null;
70 }
71
72 /** 73 * liefert die aktuelle Zahl und iteriert zum nächsten Jahr. 74 * Aufruf am Listenende liefert NoSuchElementException. 75 * @return die aktuelle Zahl 76 */
77 public int next() {
78 if (this.current == null) {
79 throw new NoSuchElementException();
80 }
81
82 Element e = this.current;
83 this.current = this.current.next;
84 return e.n;
85 }
86 }
87 }
88