summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/examples/SimpleIntList.java
diff options
context:
space:
mode:
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/examples/SimpleIntList.java')
-rw-r--r--Master/Reference Architectures and Patterns/hjp5/examples/SimpleIntList.java72
1 files changed, 72 insertions, 0 deletions
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