summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/examples/SimpleIntList.java
blob: d1b77d73fc5098563b9ce4a9436e47affc9e56e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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;
  }
}