GenericQueue / Implementierung als Ringspeicher

Java:
import java.util.*;

/*
* Queue - am rechten Ende werden neue Elemente hinzugefügt,
* am linken Ende werden Elemente entnommen
*/

class QueueException extends Exception {
    public QueueException() { super(); }
    public QueueException(String message) { super(message); }
}

public class GenericQueue <T> {

    private int anz = 0, max = 0;
    private ArrayList <T> data = null;

    public GenericQueue(int max) {
        if (max <= 0)
        max = 3;
        this.max = max;
        data = new ArrayList <T> (max);
    }

    public void queue(T e) throws QueueException {
        if (anz < max ) {
            if (anz < data.size())
            data.set(anz, e); // ersetzt das Element an der angegebenen Position in der Liste durch das angegebene Element
            else data.add(e); //hängt das angegebene Element an das Ende dieser Liste an
            anz++;
        }
        else
            throw new QueueException("Stack is full!");
    }
    
    // ENTFERNEN
    public T dequeue() throws QueueException  {
        if (anz > 0) {// min. ein Element vorhanden werden soll, um den zu löschen
        data.remove(0); // entfernt das Element an der angegebenen Position in der Liste
        return data.get(anz);
        } else
            throw new QueueException("Stack is empty!");
    }

    public String toString() {
        String s = "";
        for (int k = 0; k < anz; k++)
            s = s + data.get(k) + "  ";
        return s + '\n';
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        GenericQueue <Integer> st = new GenericQueue<Integer>(3);
        try {
            st.queue(new Integer(3)); System.out.println(st);
            st.queue(new Integer(4)); System.out.println(st);
            st.queue(new Integer(5)); System.out.println(st);
            st.dequeue(); System.out.println(st);
            st.dequeue(); System.out.println(st);
            st.dequeue(); System.out.println(st);
        } catch(QueueException e) {
            System.out.println(e.getMessage());
        }
        try {
            st.queue(new Integer(3)); System.out.println(st);
            st.queue(new Integer(4)); System.out.println(st);
            st.queue(new Integer(5)); System.out.println(st);
            st.queue(new Integer(6)); System.out.println(st);
        } catch(QueueException e) {
            System.out.println(e.getMessage());
        }
    }
}
Hallo zusammen,
in Analogie zur vorgegebenen Klasse (ArrayList) soll ich eine Datenstruktur GenericQueue, eine Warteschlange entwerfen.
Das Problem, dass die Elemente können nur links (am Anfang) entfernt werden. Elemente hinzufügen hat bei mir geklappt, aber ENTFERNEN (dequeue) leider …... Hat jemand eine Idee?
 

httpdigest

Top Contributor
Du darfst nicht wirklich ein Element aus der ArrayList entfernen, also nicht `List.remove(0)` aufrufen. Das einzige, was du bei einem Ringpuffer/-speicher machen musst, ist dir zu merken, welches die Position für das nächste zu entfernende Element und welches die Position für das nächste hinzuzufügende Element ist und entsprechend diese Positionen inkrementieren/dekrementieren (mit Modulo).
 
Oracle Docs:
public E remove(int index)

Removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts one from their indices).
Specified by: remove in interface List<E> Overrides: remove in class AbstractList<E> Parameters: index - the index of the element to be removed Returns: the element that was removed from the list Throws: IndexOutOfBoundsException - if the index is out of range (index < 0 || index >= size())


Warum darf man nicht dann ein Elemant aus der ArrayList entfernen?
 

httpdigest

Top Contributor
Vielleicht nochmal zurück an den Anfang: Was genau ist das Problem? Wenn du in die ArrayList per add() Elemente am Ende hinzufügst und per remove(0) am Anfang entfernst, dann hast du doch eine Queue gebaut und du willst doch dann nur am Anfang Elemente entfernen...
Allerdings ist das dann noch kein Ringspeicher (wie im Betreff genannt).

Dein Problem ist eher, dass deine dequeue() Methode falsch ist, weil sie eben nicht das am Anfang entfernte Element zurückliefert und auch nicht anz dekrementiert. Sie sollte wohl eher so aussehen:
Java:
public T dequeue() throws QueueException {
  if (anz == 0)
    throw new QueueException("Stack is empty!");
  anz--;
  return data.remove(0);
}
 
Vielleicht nochmal zurück an den Anfang: Was genau ist das Problem? Wenn du in die ArrayList per add() Elemente am Ende hinzufügst und per remove(0) am Anfang entfernst, dann hast du doch eine Queue gebaut und du willst doch dann nur am Anfang Elemente entfernen...
Allerdings ist das dann noch kein Ringspeicher (wie im Betreff genannt).

Dein Problem ist eher, dass deine dequeue() Methode falsch ist, weil sie eben nicht das am Anfang entfernte Element zurückliefert und auch nicht anz dekrementiert. Sie sollte wohl eher so aussehen:
Java:
public T dequeue() throws QueueException {
  if (anz == 0)
    throw new QueueException("Stack is empty!");
  anz--;
  return data.remove(0);
}


Super. Vielen vielen Dank!!!! :) Jetzt habe ich verstanden und dazu noch ein passendes Thema gefunden. https://www.java-forum.org/thema/algorithmus-warteschlange-ringpuffer-wirklich-fehlerfrei.184549/
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
ruutaiokwu JRE-/JDK-unabhängige PBKDF2WithHmacSHA512-Implementierung Java Basics - Anfänger-Themen 16
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
K Fehler bei der Implementierung Java Basics - Anfänger-Themen 6
J Implementierung gcd();square() Java Basics - Anfänger-Themen 98
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
A Implementierung von String toString methode() Java Basics - Anfänger-Themen 4
G Projekt architektur (implementierung) Java Basics - Anfänger-Themen 3
M Implementierung einer getNextId Methode Java Basics - Anfänger-Themen 5
J Implementierung Listen-ADT Java Basics - Anfänger-Themen 131
J Implementierung eines Zustandsdiagramms Java Basics - Anfänger-Themen 19
MiMa Log4j2 implementierung Java Basics - Anfänger-Themen 4
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
G Array implementierung Java Basics - Anfänger-Themen 23
J ANTLR Installierung und Implementierung Java Basics - Anfänger-Themen 2
E Hilfe bei Implementierung von Methoden Java Basics - Anfänger-Themen 10
S SkipList Implementierung Java Basics - Anfänger-Themen 1
J Methoden Suche effiziente Implementierung für eine Methode Java Basics - Anfänger-Themen 3
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
E hashCode implementierung Java Basics - Anfänger-Themen 9
S Implementierung der Klasse Konto und Nutzung bereits vorhandener Klassen Java Basics - Anfänger-Themen 7
H Implementierung eines Interfaces erweitern Java Basics - Anfänger-Themen 13
O Generics - Implementierung Java Basics - Anfänger-Themen 7
A Hilfestellung zur Implementierung des Gaußsches Eliminationsverfahren Java Basics - Anfänger-Themen 4
B OOP Implementierung eines Heaps Java Basics - Anfänger-Themen 13
K Bucketsort Implementierung Java Basics - Anfänger-Themen 0
K Mergesort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
K Quicksort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
S Klassen Klassendiagramm Implementierung? Java Basics - Anfänger-Themen 5
J Bucketsort Implementierung Java Basics - Anfänger-Themen 0
C Stack - listenbasierte Implementierung Java Basics - Anfänger-Themen 4
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
T Collections LinkedList<LinkedList<T>> - Implementierung Java Basics - Anfänger-Themen 10
F Implementierung von Interfaces -> Problem mit main Java Basics - Anfänger-Themen 12
D Resourcebundle implementierung Java Basics - Anfänger-Themen 2
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
Q Implementierung von Listenern Java Basics - Anfänger-Themen 4
B Klassen Hilfe bei Implementierung Java Basics - Anfänger-Themen 5
N Compiler-Fehler Comparable / compareTo implementierung Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Binärbaums Java Basics - Anfänger-Themen 3
I Erste Schritte Implementierung der API Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Adressbuches Java Basics - Anfänger-Themen 20
M falsche implementierung von currentTimeMillis() ? Java Basics - Anfänger-Themen 14
G Implementierung eines Kontos Java Basics - Anfänger-Themen 11
M Quicksort implementierung Java Basics - Anfänger-Themen 23
SexyPenny90 Implementierung einer doubly linked list Java Basics - Anfänger-Themen 5
N Binärbaum/Implementierung Java Basics - Anfänger-Themen 9
U Doppelte Interfcae Implementierung Java Basics - Anfänger-Themen 10
K Kleiner Fehler bei Methoden Implementierung Java Basics - Anfänger-Themen 6
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
S OOP Implementierung Komposition, Aggregation, Assoziation und Generalisierung Java Basics - Anfänger-Themen 2
C Klassenhirarchien zur Implementierung von Fahrzegen Java Basics - Anfänger-Themen 26
BinaryLogic Datentypen Statistik Interface - untersch. Implementierung Java Basics - Anfänger-Themen 5
E Performante Implementierung eines "Hintergrundprogramms" Java Basics - Anfänger-Themen 10
S Saubere Implementierung Java Basics - Anfänger-Themen 2
K Dijkstra implementierung 2.0 Java Basics - Anfänger-Themen 19
K dijskral implementierung Java Basics - Anfänger-Themen 14
U Probleme mit Server-Client implementierung Java Basics - Anfänger-Themen 5
K Game of Life Implementierung Java Basics - Anfänger-Themen 30
B OOP Problem bei Implementierung von Interface Java Basics - Anfänger-Themen 6
J HashSet Implementierung Java Basics - Anfänger-Themen 16
R NullPointerException in Queue-Implementierung Java Basics - Anfänger-Themen 11
X Frage zur Implementierung von equals() Java Basics - Anfänger-Themen 2
B Effektive Implementierung für Darstellung großer Datenmengen in Jogl Java Basics - Anfänger-Themen 5
D Datentypen Implementierung eines Binärbaumes Java Basics - Anfänger-Themen 7
B Implementierung Java Basics - Anfänger-Themen 2
N Implementierung Tic tac toc Java Basics - Anfänger-Themen 25
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
Y Implementierung einer Potenzturm Funktion Java Basics - Anfänger-Themen 4
S Implementierung gegen Interfaces / List, ArrayList, LinkedList Java Basics - Anfänger-Themen 11
J Quicksort Implementierung-- Exception ArrayOutOfBounds Java Basics - Anfänger-Themen 6
U Implementierung Constructor Java Basics - Anfänger-Themen 7
T Problem mit Implementierung von einer HashMap aufgabe Java Basics - Anfänger-Themen 2
G Implementierung des Observer/Observable Patterns - Gut so? Java Basics - Anfänger-Themen 3
I Zugriff auf Implementierung verhindern Java Basics - Anfänger-Themen 8
D Implementierung nach MVC Java Basics - Anfänger-Themen 6
B Theoretische Frage zum Programmbau (nun zur Implementierung) Java Basics - Anfänger-Themen 8
H Implementierung von Interfaces Java Basics - Anfänger-Themen 4
G Implementierung von Bäumen Java Basics - Anfänger-Themen 2
N Probleme mit paint() bei Implementierung in ein Panel Java Basics - Anfänger-Themen 4
B Wie funktioniert die implementierung von c code in Java? Java Basics - Anfänger-Themen 7
R Ringspeicher Java Basics - Anfänger-Themen 23

Ähnliche Java Themen

Neue Themen


Oben