Hallo zusammen,
ich versuche mich gerade an folgender Aufgabe für mein Studium:
Der ADT Deque (engl. Double-Ended Queue) ist eine spezielle Form einer Queue, die das Einfügen und Entfernen von Elementen an beiden Enden der Queue gestattet. Implementieren Sie den ADT Deque auf Basis eines zyklischen Arrays.
Da Java nicht zu meinen stärken zählt komme ich nicht weiter. Habe mir versucht die Sachen selbst im Internet zu suchen, da es im Skript nicht sonderlich ausführlich erklärt ist, komme aber trotzdem nicht vorwärts.
Zum prüfen des Programms haben wir noch eine Testklasse, die mir die folgenden Fehler ausgibt:
1.Fehler in der insertStart()-Methode: Es wurde fehlerhaft eine Exception ausgelößt. Details: Es wurde versucht, einer Deque mit 2 Elementen ein neues, drittes Element hinzuzufügen. Dabei wurde fehlerhaft eine Exception 'ArrayIndexOutOfBoundsException' ausgelößt. Denken Sie daran, den Array als zyklischen Array zu realisieren und die Variablen indexFirst und indexAfterLast wieder am Anfang des Array starten zu lassen. indexFirst: '0', indexAfterLast: '2', arrayOfDeque: '[7, 9]'
2.Fehler in der removeEnd()-Methode: Es wurde fehlerhaft eine Exception ausgelößt. Details: Es wurde versucht, die removeEnd()-Methode auf einer Deque mit 1 Element aufzurufen. Dabei wurde fehlerhaft eine Exception 'ArrayIndexOutOfBoundsException' ausgelößt. indexFirst: '9', indexAfterLast: '-1', arrayOfDeque: '[]'
Folgenden Code habe ich geschrieben:
ich versuche mich gerade an folgender Aufgabe für mein Studium:
Der ADT Deque (engl. Double-Ended Queue) ist eine spezielle Form einer Queue, die das Einfügen und Entfernen von Elementen an beiden Enden der Queue gestattet. Implementieren Sie den ADT Deque auf Basis eines zyklischen Arrays.
Da Java nicht zu meinen stärken zählt komme ich nicht weiter. Habe mir versucht die Sachen selbst im Internet zu suchen, da es im Skript nicht sonderlich ausführlich erklärt ist, komme aber trotzdem nicht vorwärts.
Zum prüfen des Programms haben wir noch eine Testklasse, die mir die folgenden Fehler ausgibt:
1.Fehler in der insertStart()-Methode: Es wurde fehlerhaft eine Exception ausgelößt. Details: Es wurde versucht, einer Deque mit 2 Elementen ein neues, drittes Element hinzuzufügen. Dabei wurde fehlerhaft eine Exception 'ArrayIndexOutOfBoundsException' ausgelößt. Denken Sie daran, den Array als zyklischen Array zu realisieren und die Variablen indexFirst und indexAfterLast wieder am Anfang des Array starten zu lassen. indexFirst: '0', indexAfterLast: '2', arrayOfDeque: '[7, 9]'
2.Fehler in der removeEnd()-Methode: Es wurde fehlerhaft eine Exception ausgelößt. Details: Es wurde versucht, die removeEnd()-Methode auf einer Deque mit 1 Element aufzurufen. Dabei wurde fehlerhaft eine Exception 'ArrayIndexOutOfBoundsException' ausgelößt. indexFirst: '9', indexAfterLast: '-1', arrayOfDeque: '[]'
Folgenden Code habe ich geschrieben:
Java:
public class ArrayDeque<E> extends AbstractArrayDeque<E>
{
public int size()
{
return(capacity-indexFirst+indexAfterLast)%capacity;
}
public boolean isEmpty()
{
return(indexAfterLast==indexFirst);
}
public void insertStart(E element) throws FullQueueException
{
if(size()==capacity-1)
{
throw new FullQueueException("Queue voll.");
}
else
{
arrayOfDeque[indexFirst-1]=element;
indexFirst=(indexFirst-1)%capacity;
if(indexFirst>=arrayOfDeque.length)
{
indexFirst=0;
indexAfterLast=0;
}
}
}
public void insertEnd(E element) throws FullQueueException
{
if(size()==capacity-1)
{
throw new FullQueueException("Queue voll.");
}
else
{
arrayOfDeque[indexAfterLast]=element;
indexAfterLast=(indexAfterLast+1)%capacity;
}
}
public E removeStart() throws EmptyQueueException
{
if (isEmpty())
{
throw new EmptyQueueException("Queue leer.");
}
else
{
E elem = (E) arrayOfDeque[indexFirst];
arrayOfDeque[indexFirst]=null;
indexFirst=(indexFirst+1)%capacity;
return elem;
}
}
public E removeEnd() throws EmptyQueueException
{
if (isEmpty())
{
throw new EmptyQueueException("Queue leer.");
}
else
{
indexAfterLast=(indexAfterLast-1);
E elem = (E) arrayOfDeque[indexAfterLast];
arrayOfDeque[indexAfterLast]=null;
if(indexAfterLast>=arrayOfDeque.length)
{
indexAfterLast=0;
}
return elem;
}
}
}
Zuletzt bearbeitet: