Stack erweitern mit neuem Array falls der alte voll ist!?

Proxy

Mitglied
Schönen Guten Tag die Damen und Herren,

meine Frage ist, wenn der Stack nun voll ist und ich ihn in der Push-Methode erweitern möchte, ich dann auch dem Konstruktor etwas mit geben muss oder kann ich gleich in der Methode ein neues Array erstellen lassen ?
Falls es in der Methode ist, kann mir da jemand einen Tipp geben....stehe bisschen auf dem Schlauch. :)

Vielen Dank schonmal. :)






Code:
public class IntegerStack {
    
    
    private int storage [];
    private int heigth;
    private int top;
    
    
    public IntegerStack( int heigth) {
        
        storage = new int [heigth];
        this.heigth = heigth;
        top= -1;
        
    }
  
    public void push ( int value) {
        if (top != heigth - 1) {
            storage[++top]=value;
            
        } else {
            if ( storage[top]==heigth -1) {
                    ?????????
                
                }
            }
    }
        
        
    
    
    public int pop() {
        if (!empty()) {
            return storage[top--];
        }
            return -1;                // wir wissen Stack == leer!!!!   
    }
    
    public boolean empty() {
        
        return top == -1;
            
    }
    
    public int top() {
        if (!empty()) {
            return storage[top];
        }return -1;
        
        
    }
 

KonradN

Super-Moderator
Mitarbeiter
Überlege Dir den Algorithmus erst einmal mit Worten. Stell es Dir ggf. Bildlich vor. Du hast einen kleinen Zettel auf den Du Dinge schreibst. Nun ist der Zettel voll: Was kannst Du machen?

Du willst einen größeren Zettel nehmen? Was musst Du dann machen? Auf dem kleinen Zettel steht ja bereits etwas, das Du nicht verlieren willst.

Also immer erst ein Worten sauber formulieren, was Du machen willst. Fang nicht mit Code an! Da konn nur Müll bei raus kommen (sorry! Aber was soll das `if ( storage[top]==heigth -1) [CODE]? Was hast Du Dir da gedacht?) Und als kleinen Tipp am Rande: Überlege Dir, ob Du den postdecrement bzw. preincrement Operator wirklich so nutzen willst. Das ist zwar schön kurz, aber von der Lesbarkeit ist dies immer relativ schwer lesbar. Und da sieht man nicht wirklich, was richtig ist. Muss es nun ```storage[++top]=value;[/CODE] oder storage[top++]=value;`` sein? Bzw. die Frage: Siehst Du den Fehler, wenn die falsche Variante da steht?
Es macht aus meiner Sicht Sinn, dass man das so schreibt, dass es wirklich gut zu lesen ist.

Oder einfach mal die Worte von Grady Booch:
Clean code is simple and direct.
Clean code reads like well-written prose.
Clean code never obscures the designer’s intent but rather is full of crisp abstractions and straightforward lines of control.
 

Proxy

Mitglied
Vielen Dank für die schnelle Antwort.

Java:
if ( storage[top]==heigth -1)
War nur ne Überlegung :D

Ich versuchs mal, auf dem Blatt. Ich werde es in der Methode gleich erweitern.
 

KonradN

Super-Moderator
Mitarbeiter
Ja, aber in Code überlegen ist immer blöd, wenn man da noch nicht so ganz sicher ist. Du hast ja zwei unterschiedliche Dinge. Einmal den Inhalt von dem Stack. Und zum anderen eine Größe vom Stack. Du vergleichst da also Äpfel mit Birnen. Das ist in der Regel nicht richtig. (WObei es natürlich durchaus richtig sein kann.... Man kann immer Situationen erschaffen, wo Du Äpfel mit Birnen vergleichst: Du kriegst eine LKW Ladung Äpfel und eine LKW Ladung Birnen und dann hast Du die Aufgabe, 1 Apfel und 1 Birne auszusuchen, die sich möglichst ähnlich sind.)

Oder auf das Beispiel mit dem Blatt Papier zurück zu kommen: Du willst ja nicht schauen, ob unten rechts in der Ecke steht, wie groß das Papier ist. Also das wäre ja etwas wie prüfen, ob unten rechts auf dem Din A4 Blatt "A4" steht. Evtl. macht so eine Prüfung irgendwo Sinn (Auch hier kann man sich Situationen aus den Fingern saugen: Du willst als Hersteller von Papier unten Rechts die Größe stehen haben. Also wird die QA Abteilung prüfen: Steht da überall auch wirklich die korreke Größe?).
Aber so etwas haben wir hier ja nicht.

Aber generell: Ja, die Idee dann ein neues, größeres Blatt zu nehmen ist gut! Du musst halt nur schauen, wie Du die Daten behalten kannst.

Ganz nebenbei: Das was Du da gerade baust, ist auch im Java Framework zu finden. Die ArrayList arbeitet auch so: Man hat intern ein Array in dem die Daten gespeichert werden. Ist das Array voll, dann wird ein größeres Array genommen (und natürlich noch etwas mehr gemacht damit) um halt die Daten wirklich speichern zu können.
 

Proxy

Mitglied
Vielen Dank für die Antwort.

Meine Frage war halt grundsätzlich, ob ich auch dem Konstruktor, da was mit geben muss oder nicht, weil ich ein wenig auf dem Schlauch stand. :D

Aber ich habs jetzt schon raus.
Java:
public void push ( int value) {
        
    if (storage.length == heigth) {
        int []copy = new int[storage.length+10];
        for (int i =0; i!=heigth; i++) {
            copy[i]= storage[i];
        }storage=copy;
    }storage[++top]= value;
 

KonradN

Super-Moderator
Mitarbeiter
Ja genau. Und Du hast es richtig gemacht - der Konstruktor braucht diesbezüglich keine weiteren Informationen.

Dein Code ist somit schon eine super Lösung.

Evtl. paar Anmerkungen:
  • Bei so eine for Schleife, die ein Array durchgeht: Da wäre etwas wie i < heigth üblicher. Dein != macht aber unter dem Strich auch nichts anderes, aber mit dem < wird es in der Zähl Schleife eifnach etwas deutlicher da es ja eine Aussage wäre ähnlich "zähle so lange wie du kleiner als.... bist"
  • Eine schwere Frage ist immer, mit welcher Strategie man vorgeht. Das einzig wichtige ist natürlich: Es muss mindestens um 1 Element vergrößert werden. Teilweise findet man Ansätze wie: Wir packen immer 50% und mind. 1 Element drauf. EInfach um zu vermeiden, dass man zu oft das Array vergrößern muss.
Mit dem +50% hätte man ein schnelles Anwachsen bei großer Anzahl an Elementen.
Das aber wirklich nur als Gedanken zu der Lösung - das ist keine Kritik! Deine erarbeitete Lösung ist korrekt und gut!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A stack Java Basics - Anfänger-Themen 14
V Ist Off-Heap-Speicher dasselbe wie Stack-Speicher? Java Basics - Anfänger-Themen 2
izoards Stack... Java Basics - Anfänger-Themen 17
Csircc Rekursive Methode Stack Overflow Java Basics - Anfänger-Themen 10
B Zahlenfolge von Queue in Stack Java Basics - Anfänger-Themen 29
L Stack bilden, push und pop Java Basics - Anfänger-Themen 16
KogoroMori21 Stack und Heap Speicher Java Basics - Anfänger-Themen 1
G Stack und Queue Arbeitsblatt Java Basics - Anfänger-Themen 3
G Stack programmieren Java Basics - Anfänger-Themen 6
Z Datentypen Stack based calculator Java Basics - Anfänger-Themen 8
F speicherort stack oder heap Java Basics - Anfänger-Themen 1
S Rekursiven Stack Java Basics - Anfänger-Themen 6
Curtis_MC Collections Zufälliges Element aus Stack Java Basics - Anfänger-Themen 2
D Queue vs. Stack Java Basics - Anfänger-Themen 6
P Stack, Heap Java Basics - Anfänger-Themen 13
D Erste Schritte Stack im Rollenspiel Java Basics - Anfänger-Themen 76
J Stack mit Benutzereingabe Java Basics - Anfänger-Themen 17
J Liste,Queue,Stack sortieren Java Basics - Anfänger-Themen 2
C Stack und Queue in Aktion (Bitte Hilfe für die Klausur) Java Basics - Anfänger-Themen 7
S Sequenz von Zahlen bei einem Stack möglich oder nicht möglich? Java Basics - Anfänger-Themen 5
E Stack vs Queue - Gemeinsamkeiten / Unterschiede Java Basics - Anfänger-Themen 7
C Laufzeit von Stack Operation Java Basics - Anfänger-Themen 5
4 Stack over flow bei rekursiver Tiefensuche Java Basics - Anfänger-Themen 5
J Quicksort mit Stack Java Basics - Anfänger-Themen 4
A Anzahl der Elemente in einem Stack wiedergeben Java Basics - Anfänger-Themen 3
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
K Tiefen- und Breitensuche beim Baum durch Stack und Warteschlange Java Basics - Anfänger-Themen 1
L Liste mittels Stack implementieren Java Basics - Anfänger-Themen 0
A Stack programmieren -> Unklarheiten Java Basics - Anfänger-Themen 1
C Stack - listenbasierte Implementierung Java Basics - Anfänger-Themen 4
L Mit rekursiven Aufrufen einen Stack emulieren Java Basics - Anfänger-Themen 1
T Frage zu Java Stack Java Basics - Anfänger-Themen 5
D Stack-Objekt - LIFO - wait(); notify(); Java Basics - Anfänger-Themen 0
J Array von Objekten, wie schauts im Heap / Stack aus ? Java Basics - Anfänger-Themen 7
M Frage zu Stack und Heap Java Basics - Anfänger-Themen 1
Farbenfroh Suche Übungsaufgaben: BinaryTree, Stack Java Basics - Anfänger-Themen 0
D Aufgabe: Stack mit Iterator Java Basics - Anfänger-Themen 8
X Stack mit Oberklasse, wieso funktioniert es nicht? Java Basics - Anfänger-Themen 8
B Stack/Heap Frage Java Basics - Anfänger-Themen 36
K Probleme mit stack Java Basics - Anfänger-Themen 7
K Wofür wird heute noch die Stack Klasse in Java genutzt Java Basics - Anfänger-Themen 4
F Rekursion Tiefensuch-Problem - Stack Overflow Java Basics - Anfänger-Themen 9
P LinkedList - Stack ... grundlegende Frage Java Basics - Anfänger-Themen 5
B Stack in eine verkettete Liste pushen Java Basics - Anfänger-Themen 4
J OOP Warum braucht man den Stack Java Basics - Anfänger-Themen 3
B Queue mit Daten aus einem Stack füllen Java Basics - Anfänger-Themen 21
G Stack invertieren Java Basics - Anfänger-Themen 3
H Pseudo-Stack (char[] stackArray) mit Zeichen aus einer .txt-Datei befüllen Java Basics - Anfänger-Themen 5
S Stack Problem mit Objekt Java Basics - Anfänger-Themen 2
X String mit String von Objekt im Stack vergleichen? Java Basics - Anfänger-Themen 14
D Stack auslesen mit pop Java Basics - Anfänger-Themen 2
S Stack als verkettete liste/ toString methode Java Basics - Anfänger-Themen 3
S Exceptions bei push/pop in Stack Java Basics - Anfänger-Themen 8
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
S Stack: Klasseninvariante Java Basics - Anfänger-Themen 4
L OOP Wrapper Klassen - Stack-Aufgabe Java Basics - Anfänger-Themen 2
M Frage zu Stack Java Basics - Anfänger-Themen 3
D Problem mit Set, Stack und Random Java Basics - Anfänger-Themen 2
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
T Probleme bei einen Stack der über drei Dateien funktionieren soll Java Basics - Anfänger-Themen 5
V java.util.Stack Java Basics - Anfänger-Themen 9
K Stack und immer gleiches Objekt Java Basics - Anfänger-Themen 11
kulturfenster Stack / Queue Implementationen Java Basics - Anfänger-Themen 11
S Stack einlesen. Java Basics - Anfänger-Themen 2
E Stack kann nicht implimentiert werden Java Basics - Anfänger-Themen 11
E Eigene Stack Klasse schreiben Java Basics - Anfänger-Themen 12
J Stack Java Basics - Anfänger-Themen 3
K min-int-Wert in'nem Stack Java Basics - Anfänger-Themen 8
L Stack UpnRechner Java Basics - Anfänger-Themen 4
B Stack mit Bildern füllen Java Basics - Anfänger-Themen 2
B Stack mit Strings in zufälliger Reihenfolge füllen Java Basics - Anfänger-Themen 4
J Stack, der Integer-Zahlen enthält Java Basics - Anfänger-Themen 3
K Array Stack Java Basics - Anfänger-Themen 6
O Stack-Klasse Java Basics - Anfänger-Themen 7
S Stack mit Arrays Java Basics - Anfänger-Themen 3
T generischer stack Java Basics - Anfänger-Themen 3
Z Keller/Stack Problem Java Basics - Anfänger-Themen 11
H Stack und Queue Java Basics - Anfänger-Themen 6
M Stack SetValTop Java Basics - Anfänger-Themen 6
G Die Klasse Stack selber schreiben. Java Basics - Anfänger-Themen 2
F Klammertest mit Stack implementieren Java Basics - Anfänger-Themen 5
X Stack Java Basics - Anfänger-Themen 14
J Morgen Java-Klausur. Stack, Heap, Method-Area Java Basics - Anfänger-Themen 2
H Unterschied zwischen Stack und Array Java Basics - Anfänger-Themen 3
F MergeSort iterativ mit Hilfe von Stack Java Basics - Anfänger-Themen 5
S stack Java Basics - Anfänger-Themen 3
S Stack invertieren Java Basics - Anfänger-Themen 14
S Stack-Operationen Java Basics - Anfänger-Themen 59
S Stack.pop() wie genau funktioniert das? Java Basics - Anfänger-Themen 3
A Stack, Frage zur Methode push Java Basics - Anfänger-Themen 4
C Anzahl der Elemente auf einem Stack Java Basics - Anfänger-Themen 4
D Stack chaos Java Basics - Anfänger-Themen 2
megachucky kleines problem mit nem STACK Java Basics - Anfänger-Themen 8
I Stack ist auf einmal empty Java Basics - Anfänger-Themen 3
R Beispiele für Stack & Visualisierung Java Basics - Anfänger-Themen 2
R Stack: Wieso funktioiert das? Java Basics - Anfänger-Themen 2
B eine kleine leichte aufgabe mit einem stack programmieren Java Basics - Anfänger-Themen 2
N Stack-Probleme Java Basics - Anfänger-Themen 2
K Stack Overflow Java Basics - Anfänger-Themen 2
Poppigescorn Arrayliste Mittels Scanner erweitern Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben