Hallo zusammen,
sitze an einer Frage/einem Problem fest.
Es soll eine Klasse "SchlangeMitEVL" erstellt werden, die im Prinzip eine Schlange mit einer einfach verketteten Liste ist.
Beim JUnit test, kommen allerdings Fehler auf, die ich nicht verstehe, bzw. warum diese entstehen..
SchlangeMitEVL hat folgende 3 Methoden, die mir etwas Sorgen bereiten:
bei Insert wird das addLast von EVL aufgerufen, damit der Wert "von hinten" in die Liste geschoben wird. Wie bei einer Warteschlange.
Hier der wichtige Code von EVL:
Im dazugehörigen JUnit test sind nun folgende Fehler:
Bei testInsertAndRemove ist der Fehler im 1. assertEquals "NoSuchElementException:Element konnte nicht entfernt werden".
Aber warum? removeFirst von EVL sollte doch dann die 1 removen oder?
Bei testFront ist der Fehler ebenfalls im 1. assertEquals "NoSuchElementException: Get First: Liste ist leer".
Die Liste sollte doch in etwa so aussehen <A,B> bzw.
Bedeutet das, wenn man einer Liste ein Element von hinten anfügt, dass das "erste" Element den Wert "null" hat?
sitze an einer Frage/einem Problem fest.
Es soll eine Klasse "SchlangeMitEVL" erstellt werden, die im Prinzip eine Schlange mit einer einfach verketteten Liste ist.
Beim JUnit test, kommen allerdings Fehler auf, die ich nicht verstehe, bzw. warum diese entstehen..
SchlangeMitEVL hat folgende 3 Methoden, die mir etwas Sorgen bereiten:
Java:
@Override
public void insert(T value) throws IllegalStateException {
evl.addLast(value);
}
@Override
public T remove() throws NoSuchElementException {
if (isEmpty()) {
throw new NoSuchElementException("Schlange ist leer");
}
T removed = evl.removeFirst();
if (removed == null) {
throw new NoSuchElementException("Element konnte nicht entfernt werden");
}
return removed;
}
@Override
public T front() throws NoSuchElementException {
if (isEmpty()) {
throw new NoSuchElementException("Schlange ist leer");
}
return evl.getFirst();
}
bei Insert wird das addLast von EVL aufgerufen, damit der Wert "von hinten" in die Liste geschoben wird. Wie bei einer Warteschlange.
Hier der wichtige Code von EVL:
Java:
public T removeFirst(){
if(null != first) {
T r = first.data;
first = first.next;
size--;
return r;
}
return null;
}
public T getFirst()throws NoSuchElementException{
if(first == null) {
throw new NoSuchElementException("Get First: Liste ist leer");
}
return first.data;
}
public void addLast(T o){
ListenEl e = new ListenEl(o);
if (first == null) {
first = e;
} else {
ListenEl current = first;
while (current.next != null) {
current = current.next;
}
current.next = e;
}
size ++;
}
Im dazugehörigen JUnit test sind nun folgende Fehler:
Code:
public void testInsertAndremove() {
SchlangeMitEVL<Integer> schlange = new SchlangeMitEVL<>();
schlange.insert(1);
schlange.insert(2);
assertEquals(1, (int) schlange.remove());
assertEquals(2, (int) schlange.remove());
assertTrue(schlange.isEmpty());
}
public void testFront() {
SchlangeMitEVL<String> schlange = new SchlangeMitEVL<>();
assertTrue(schlange.isEmpty());
schlange.insert("A");
schlange.insert("B");
assertEquals("A", schlange.front());
assertEquals("B", schlange.front());
}
Bei testInsertAndRemove ist der Fehler im 1. assertEquals "NoSuchElementException:Element konnte nicht entfernt werden".
Aber warum? removeFirst von EVL sollte doch dann die 1 removen oder?
Bei testFront ist der Fehler ebenfalls im 1. assertEquals "NoSuchElementException: Get First: Liste ist leer".
Die Liste sollte doch in etwa so aussehen <A,B> bzw.
Bedeutet das, wenn man einer Liste ein Element von hinten anfügt, dass das "erste" Element den Wert "null" hat?