Hallo zusammen,
könnte mir jemand bei dem Verständnis dieser Methode helfen.
Es ist eine Methode aus einer ArrayQueue Klasse, die ein weiteres Element zum Array hinzufügt. Falls weiterer Code erforderlich ist, bitte sagen!
@Override
public void enqueue(E e) throws FullQueueException {
if (!full()) {
queue[tail] = e;
if (++tail == queue.length) {
tail = 0;
}
} else {
throw new FullQueueException("Die Queue ist voll!");
}
}
Also, meine Frage bezieht sich auf die Zweite if-Abfrage.
Im Grunde verstehe ich was passiert, die Methode funktioniert auch wie sie soll.
zunächst was ich verstehe:
In der Abfrage wird noch VOR dem Vergleich mit queue.lenght verglichen. Heißt, zunächst wird geprüft, ob die queue überhaupt voll ist
(full.methode, wenn head ==0 und tail == queue.lenght ODER wenn tails +1 = head (also bildlich tail links neben head))
wenn nicht voll, wird das neue element auf die LEERE position gesetzt auf die tail gerade zeigt.
tail wird in der nächsten if abfrage ja dann also sofort um 1 erhöht , zeigt auf die nächste LEERE position, und mit der länge vergleichen.
so, jetzt stell ich mir vor, dass ich eine queue der länge 5 habe,
hier können dann nur 4 plätze belegt werden, weil ..siehe full-methode
die Positionen 0,1,2 sind belegt, tao zeigt auf 3
ich führe die enqueue methode aus, element wird auf position 3 hinzugefügt
tail wird um 1 erhöht und zeigt auf die letzte position 4 ,
warum geht er nicht die operation der bedingung und setzt tail = 0, (WAS er ja auch nicht soll), ich
kann nur nicht nachvollziehen warum das so ist (hat aber wahrscheinlich mit dem PRÄinkrement zu tun???
danke und sorry für den langen text
LG
könnte mir jemand bei dem Verständnis dieser Methode helfen.
Es ist eine Methode aus einer ArrayQueue Klasse, die ein weiteres Element zum Array hinzufügt. Falls weiterer Code erforderlich ist, bitte sagen!
@Override
public void enqueue(E e) throws FullQueueException {
if (!full()) {
queue[tail] = e;
if (++tail == queue.length) {
tail = 0;
}
} else {
throw new FullQueueException("Die Queue ist voll!");
}
}
Also, meine Frage bezieht sich auf die Zweite if-Abfrage.
Im Grunde verstehe ich was passiert, die Methode funktioniert auch wie sie soll.
zunächst was ich verstehe:
In der Abfrage wird noch VOR dem Vergleich mit queue.lenght verglichen. Heißt, zunächst wird geprüft, ob die queue überhaupt voll ist
(full.methode, wenn head ==0 und tail == queue.lenght ODER wenn tails +1 = head (also bildlich tail links neben head))
wenn nicht voll, wird das neue element auf die LEERE position gesetzt auf die tail gerade zeigt.
tail wird in der nächsten if abfrage ja dann also sofort um 1 erhöht , zeigt auf die nächste LEERE position, und mit der länge vergleichen.
so, jetzt stell ich mir vor, dass ich eine queue der länge 5 habe,
hier können dann nur 4 plätze belegt werden, weil ..siehe full-methode
die Positionen 0,1,2 sind belegt, tao zeigt auf 3
ich führe die enqueue methode aus, element wird auf position 3 hinzugefügt
tail wird um 1 erhöht und zeigt auf die letzte position 4 ,
warum geht er nicht die operation der bedingung und setzt tail = 0, (WAS er ja auch nicht soll), ich
kann nur nicht nachvollziehen warum das so ist (hat aber wahrscheinlich mit dem PRÄinkrement zu tun???
danke und sorry für den langen text
LG