Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal.

morry329

Mitglied
Es geht um den folgenden Queue-Datenstruktur-Code

Java:
package Appendix_D;

import java.util.Arrays;

public class Supermarket {
    static int[] schlange;
    int size;
    int front;
    int rear;
    static int l;

    Supermarket(int data){
        size = data;
        schlange = new int[size];
        front = 0;
        rear = 0;
        l = schlange.length;
    }

    int enqueue(int data){
        if(front == rear && l < 2){
            schlange[rear] = data;
            System.out.println("wow only " + data + " is there");
            return data;
        } else {
            schlange[rear] = data;
            rear++;
        }
        return data;
    }

    void dequeue(){
        int data = schlange[front];
        if(front==size){
            front = 0;
        } else {
                data = schlange[front++];
                System.out.println("deQ-QA!: " + data);
                l--;
        }
    }



    public static void main(String[] args) {
        Supermarket q = new Supermarket(10);
        q.enqueue(8);
        q.enqueue(77);
        q.enqueue(66);
        q.enqueue(145);
        q.enqueue(7198);
        q.enqueue(58);
        q.enqueue(15);
        q.dequeue();
        q.dequeue();

        for(int i = 0; i < l ; i++){
            System.out.println(schlange[i]); //ergebnis ausdrücken 
        }

    }
}

Die Methode enqueue funktioniert wie erwartet, aber die dequeue leider nicht.
Die for-schleife in der main-Methode sollte wie folgt ausdrücken:
66
154
7198
58
15

Aber der Code drückt stattdessen so aus:

8
77
66
154
7198
58
15

Kann jemand mir eine Hilfsstellung geben? Ich bin damit überfordert :/
 

KonradN

Super-Moderator
Mitarbeiter
Mir fehlen bei dem Code etwas die Worte. Was machst du da Dinge static?

Und in der Schleife gibst du den Inhalt des ganzen Arrays aus. Du erwartest aber wohl, dass du nur den Rest der Schlange ausgibst. (Und du hast bei der Ausgabe die 0er, die noch kommen, unterschlagen, oder?)
 

KonradN

Super-Moderator
Mitarbeiter
Die erste Antwort kam vom Smartphone, aber ich möchte hier doch noch einmal etwas mehr ausholen und eine deutlich umfangreichere Antwort geben.

1. Was direkt negativ aufgefallen ist, sind die static Elemente. Damit kannst Du sinnvoll nur eine Instanz der Klasse haben. Denn die interne Schlange ist ja static und damit von allen Instanzen geteilt. schlange und l würden bei jeder neuen Instanz überschrieben.

Das wird vermutlich einfach nur daher gekommen sein, dass du da halt aus der main Methode drauf zugreifen wolltest. Das ist aber einfach eine Sache, die nicht zu erfolgen hat! Wenn Du etwas mit einer Schlange machen wolltest, dann machst Du das über Zugriffe auf die Instanz. Das kann dann zu einem Code wie hier führen (Inhaltliche Probleme mal außen vor gelassen):
Java:
package de.kneitzel;

public class Supermarket {
    int[] schlange;   // kein static mehr!
    int size;
    int front;
    int rear;
    int l;           // kein Static mehr!

    Supermarket(int data){
        size = data;
        schlange = new int[size];
        front = 0;
        rear = 0;
        l = schlange.length;
    }

    int enqueue(int data){
        if(front == rear && l < 2){
            schlange[rear] = data;
            System.out.println("wow only " + data + " is there");
            return data;
        } else {
            schlange[rear] = data;
            rear++;
        }
        return data;
    }

    void dequeue(){
        int data = schlange[front];
        if(front==size){
            front = 0;
        } else {
            data = schlange[front++];
            System.out.println("deQ-QA!: " + data);
            l--;
        }
    }



    public static void main(String[] args) {
        Supermarket q = new Supermarket(10);
        q.enqueue(8);
        q.enqueue(77);
        q.enqueue(66);
        q.enqueue(145);
        q.enqueue(7198);
        q.enqueue(58);
        q.enqueue(15);
        q.dequeue();
        q.dequeue();

        for(int i = 0; i < q.l ; i++){   // Zugriff auf l in der Instanz q!
            System.out.println(q.schlange[i]); // Zugriff auf schlange der Instanz q!
        }

    }
}

2. Kapselung - Wie was in der Schlange gespeichert wird, interessiert nur die Schlange selbst. Die main Method eist zwar in der gleichen Klasse, aber das ist ja eigentlich dein Programm und gehört nicht zu der eigentlichen Implementation von Supermarket.

Wenn Du also in der Schleife den Inhalt der Schlange ausgeben willst, dann ist das eine Methode der Klasse und die main Methode greift da dann drauf zu. In der main Methode hast Du dann also sowas wie "q.printContent()" und da greifst Du dann auf diverse Dinge zu und gibst diese aus.

3. Implementation der Schlange: Das sieht so erst einmal nicht korrekt aus. Du musst Dir die Operationen deutlich besser überlegen:

Uns fehlt die Spezifikation und was Du genau wie machen willst. Aber sowohl enqueue als auch dequeue sind so nicht korrekt.
Du kannst ja einfach mal mit Deiner Implementation etwas spielen:
Code:
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
q.enqueue(4);
q.dequeue();
q.enqueue(5);
q.dequeue();
q.enqueue(6);
q.dequeue();
q.enqueue(7);
q.dequeue();
q.enqueue(8);
q.dequeue();
q.enqueue(9);
q.dequeue();
q.enqueue(10);
q.dequeue();
q.enqueue(11);
q.dequeue();
q.enqueue(12);
q.dequeue();
q.enqueue(13);
q.dequeue();
q.enqueue(14);
q.dequeue();
q.enqueue(15);
q.dequeue();
Es sind nie mehr wie 4 Elemente in der Queue aber diese Nutzung wird nicht funktionieren bei Deine Implementation.

Du musst also die ganzen Fälle, die möglich sind, genauer überlegen. Und ich denke, dass Du dann feststellen wirst, dass der Sonderfall mit Queue mit nur einem Element nicht wirklich so behandelt werden muss.

Wenn man Dir mit der Funktionalität der Queue helfen soll, dann braucht man aber deutlich mehr Informationen zu dem gewünschten Verhalten. Was ist, wenn die Queue voll ist? Soll dann überschrieben werden? Oder wie soll dann das Verhalten sein?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Klassen Die lineare Datenstruktur Queue Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Vererbung Queue bestehend aus Superclass- und Subclass-Objekten Java Basics - Anfänger-Themen 7
B Zahlenfolge von Queue in Stack Java Basics - Anfänger-Themen 29
J Java Queue mit default Werten erstellen Java Basics - Anfänger-Themen 4
P Priority Queue Performance Java Basics - Anfänger-Themen 3
Chabub Hilfe bei Stacks und Queue Java Basics - Anfänger-Themen 2
G Stack und Queue Arbeitsblatt Java Basics - Anfänger-Themen 3
F Queue zyklisch Java Basics - Anfänger-Themen 8
D Queue vs. Stack Java Basics - Anfänger-Themen 6
L Queue mithilfe von 2 Stacks erstellen Java Basics - Anfänger-Themen 1
B Automatisierung von Jobs / @EJB Scheduler / Verhinderung, dass Queue überläuft Java Basics - Anfänger-Themen 2
A Priority Queue / Comparator Java Basics - Anfänger-Themen 6
J Queue Warteschlange Java Basics - Anfänger-Themen 3
J Liste,Queue,Stack sortieren Java Basics - Anfänger-Themen 2
Y Unendlicher Ringbuffer (Queue) Java Basics - Anfänger-Themen 49
C Stack und Queue in Aktion (Bitte Hilfe für die Klausur) Java Basics - Anfänger-Themen 7
E Stack vs Queue - Gemeinsamkeiten / Unterschiede Java Basics - Anfänger-Themen 7
H Collections StackOverflowError in einer Queue Java Basics - Anfänger-Themen 3
JokerBlacky Klassen Klasse Queue Klasse mit Attributen anhängen und auslesen können Java Basics - Anfänger-Themen 4
K Queue enq Fehler Java Basics - Anfänger-Themen 2
F Thread der auf eine Queue wartet, sicher beenden Java Basics - Anfänger-Themen 4
A Queue (Array) leeren Java Basics - Anfänger-Themen 1
F HTTP Get Queue Java Basics - Anfänger-Themen 7
J Queue zyklisch auslesen Java Basics - Anfänger-Themen 4
B Generische Queue programmieren Java Basics - Anfänger-Themen 5
T Priority-Queue Java Basics - Anfänger-Themen 9
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
P Array queue problem Java Basics - Anfänger-Themen 1
L Queue programmieren via BlueJ Java Basics - Anfänger-Themen 5
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
I Erste Schritte Queue Java Basics - Anfänger-Themen 14
G Queue auf einer Seite löschen, andre Seite schreiben Java Basics - Anfänger-Themen 3
G Queue mit int oder float Java Basics - Anfänger-Themen 3
Q queue.remove Element trotzdem noch vorhanden. Java Basics - Anfänger-Themen 10
P Priority Queue Java Basics - Anfänger-Themen 6
M Compiler-Fehler Queue als ArrayList mit Exceptions Java Basics - Anfänger-Themen 3
S Fehler beim Auslösen des ActionListeners in Verbindung mit einer Queue Java Basics - Anfänger-Themen 5
B Queue mit Daten aus einem Stack füllen Java Basics - Anfänger-Themen 21
P Collections Queue mittels ArrayList Java Basics - Anfänger-Themen 2
T Collections Queue<? extends Number> add() offer() Java Basics - Anfänger-Themen 13
S Queue als doppelt verkettete Liste Java Basics - Anfänger-Themen 2
R NullPointerException in Queue-Implementierung Java Basics - Anfänger-Themen 11
B Queue problem! Java Basics - Anfänger-Themen 2
R Queue abhören und Message in Browser ausgeben Java Basics - Anfänger-Themen 3
T Erstellung von Queue mit verkketten listen Java Basics - Anfänger-Themen 3
kulturfenster Stack / Queue Implementationen Java Basics - Anfänger-Themen 11
K Priority Queue - wo ist denn jetzt der Vorteil? Java Basics - Anfänger-Themen 7
W Iterator in Queue Java Basics - Anfänger-Themen 5
Q An erste Stelle in eine Queue eintragen Java Basics - Anfänger-Themen 4
H Stack und Queue Java Basics - Anfänger-Themen 6
M Threadsichere Queue in Java 1.5? Java Basics - Anfänger-Themen 2
G Int-Queue in String-Queue umwandeln Java Basics - Anfänger-Themen 5
A Queue erweitern Java Basics - Anfänger-Themen 13
P Queue, Stacks, Listen Java Basics - Anfänger-Themen 7
S Queue als Array implementiert get()? Java Basics - Anfänger-Themen 4
S Queue als verkettete Liste Java Basics - Anfänger-Themen 9
S Queue Java Basics - Anfänger-Themen 30
K Prüfen, ob Queue leer ist Java Basics - Anfänger-Themen 5
FelixN Teilsummenproblem / welche Datenstruktur Java Basics - Anfänger-Themen 2
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
O Datenstruktur auf SET prüfen in O(n) Java Basics - Anfänger-Themen 32
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
F Beste Datenstruktur zum Speichern? Java Basics - Anfänger-Themen 1
I Spielbrett programmieren: Datenstruktur Java Basics - Anfänger-Themen 3
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
C Methoden Datenstruktur Liste Java Basics - Anfänger-Themen 3
S Datentypen nicht lineare STATISCHE Datenstruktur? Java Basics - Anfänger-Themen 10
S Zusammenhang Datenstruktur/Algorithmus Java Basics - Anfänger-Themen 1
M Datenstruktur gesucht Java Basics - Anfänger-Themen 3
Luk10 Geeignete Datenstruktur Java Basics - Anfänger-Themen 4
J Erzeugen einer Datenstruktur Java Basics - Anfänger-Themen 12
T Datenstruktur für Sortierung Java Basics - Anfänger-Themen 4
H mehrdimensionale Datenstruktur erfassen Java Basics - Anfänger-Themen 10
StupidAttack Gson, welche Datenstruktur? Java Basics - Anfänger-Themen 4
T Java-Datenstruktur: zuweisen von Strings auf Listen von Strings Java Basics - Anfänger-Themen 10
N Vektor mit eigener Datenstruktur sortieren Java Basics - Anfänger-Themen 20
D Welche Datenstruktur für welche Problemstellung? Java Basics - Anfänger-Themen 10
A begrenzte Datenstruktur zur Speicherung von bytes Java Basics - Anfänger-Themen 6
H Adjazenzliste - Datenstruktur aber wie? Java Basics - Anfänger-Themen 7
Povlsen84 Datentypen Große, sortierte, schnelle Datenstruktur Java Basics - Anfänger-Themen 9
B Finden gemeinsamer Kanten: welche Datenstruktur ? Java Basics - Anfänger-Themen 9
B Schlange Datenstruktur Java Basics - Anfänger-Themen 16
G Datenstruktur gesucht Java Basics - Anfänger-Themen 14
A Schnelle, dynamische, geordnete Datenstruktur? Java Basics - Anfänger-Themen 11
E Gibt es eine ähnliche Datenstruktur wie eine Hashmap Java Basics - Anfänger-Themen 3
K eigene Hash-Datenstruktur Java Basics - Anfänger-Themen 2
D Was fürne Datenstruktur für Kreuztabelle mit doubles? Java Basics - Anfänger-Themen 1
K Datentyp vs. Datenstruktur - Unterschiede Java Basics - Anfänger-Themen 13
D Was machen wenn Datenstruktur sich ständig ändert? Java Basics - Anfänger-Themen 10
0 Dynamische Datenstruktur ohne Duplikate und mit direkter Elementauswahl Java Basics - Anfänger-Themen 3
G Welche Datenstruktur ( Sets / Maps)? Java Basics - Anfänger-Themen 10
I Datenstruktur eines Terminkalenders Java Basics - Anfänger-Themen 11
K suche nicht dynamisch Datenstruktur Java Basics - Anfänger-Themen 6
M Suche passende Datenstruktur Java Basics - Anfänger-Themen 3
P geeignete Datenstruktur für dreidimensionale Raumbelegung Java Basics - Anfänger-Themen 5
G Suche geeignete Datenstruktur Java Basics - Anfänger-Themen 8
G Baum Datenstruktur Java Basics - Anfänger-Themen 2
U Welche Datenstruktur soll ich nehmen? Java Basics - Anfänger-Themen 11

Ähnliche Java Themen


Oben