From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/examples/SimpleIntList.java | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/examples/SimpleIntList.java (limited to 'Master/Reference Architectures and Patterns/hjp5/examples/SimpleIntList.java') diff --git a/Master/Reference Architectures and Patterns/hjp5/examples/SimpleIntList.java b/Master/Reference Architectures and Patterns/hjp5/examples/SimpleIntList.java new file mode 100644 index 0000000..d1b77d7 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/examples/SimpleIntList.java @@ -0,0 +1,72 @@ +public class SimpleIntList +{ + private int[] data; + private int len; + + public SimpleIntList(int size) + { + this.data = new int[size]; + this.len = 0; + } + + public void add(int value) + { + //Precondition als RuntimeException + if (full()) { + throw new RuntimeException("Liste voll"); + } + //Implementierung + data[len++] = value; + //Postcondition + assert !empty(); + } + + public void bubblesort() + { + if (!empty()) { + int cnt = 0; + while (true) { + //Schleifeninvariante + assert cnt++ < len: "Zu viele Iterationen"; + //Implementierung... + boolean sorted = true; + for (int i = 1; i < len; ++i) { + if (sortTwoElements(i - 1, i)) { + sorted = false; + } + } + if (sorted) { + break; + } + } + } + } + + public boolean empty() + { + return len <= 0; + } + + public boolean full() + { + return len >= data.length; + } + + private boolean sortTwoElements(int pos1, int pos2) + { + //Private Preconditions + assert (pos1 >= 0 && pos1 < len); + assert (pos2 >= 0 && pos2 < len); + //Implementierung... + boolean ret = false; + if (data[pos1] > data[pos2]) { + int tmp = data[pos1]; + data[pos1] = data[pos2]; + data[pos2] = tmp; + ret = true; + } + //Postcondition + assert data[pos1] <= data[pos2] : "Sortierfehler"; + return ret; + } +} \ No newline at end of file -- cgit v1.2.3