2 package newlocal;
3
4 import java.util.Iterator;
5 import java.util.NoSuchElementException;
6 import java.util.function.Consumer;
7
8 /**
9 * IntList verwaltet ganze Zahlen als Liste.
10 * Beispielprogramm zur Programmiertechnik 1, Teil 5.
11 * @author H.Drachenfels
12 * @version 17.7.2024
13 */
14 public final class IntList implements Iterable<Integer> {
15 private Element head;
16
17 /**
18 * Legt eine leere Liste an.
19 */
20 public IntList() {
21 this.head = null;
22 }
23
24 /**
25 * Fügt eine Zahl am Listenanfang ein.
26 * @param n die einzufügende Zahl
27 * @return die Liste
28 */
29 public IntList insert(int n) {
30 this.head = new Element(this.head, n);
31 return this;
32 }
33
34 /**
35 * Element speichert eine einzelne Zahl als Teil einer Liste.
36 * Beipiel für eine statisch eingebettete Klasse.
37 */
38 private static final class Element {
39 private final Element next;
40 private final int n;
41
42 private Element(Element e, int n) {
43 this.next = e;
44 this.n = n;
45 }
46 }
47
48 @Override
49 public Iterator<Integer> iterator() {
50 // Beispiel fuer eine anonyme lokale Klasse
51 return new Iterator<Integer>() {
52 private Element current = IntList.this.head;
53
54 @Override
55 public boolean hasNext() {
56 return this.current != null;
57 }
58
59 @Override
60 public Integer next() {
61 if (this.current == null) {
62 throw new NoSuchElementException();
63 }
64
65 Element e = this.current;
66 this.current = this.current.next;
67 return e.n; // Integer.valueOf(e.n);
68 }
69 };
70 }
71
72 @Override
73 public void forEach(Consumer<? super Integer> action) {
74 for (Element e = this.head; e != null; e = e.next) {
75 action.accept(e.n);
76 }
77 }
78 }
79