1 // IntList.java
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&uuml;gt eine Zahl am Listenanfang ein. 26 * @param n die einzuf&uuml;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&uuml;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