Stack selber Programmieren

DerEisige

Erfahrenes Mitglied
Hallo, ich bin seit einer Stunde dabei selber einen Steck zu Programmviren, die Funktionsweise habe ich verstanden :D:D aber bei der Cod-Umsetzung hapert es noch:(.

Mein Problem ist das ich das Neu erzeugen und verweisen auf das zufolge nicht hinbekomme.


Das habe ich bis jetzt

Main.java
Java:
package Stack;

public class Main {

    public static void main(String[] args) {
        Stac ss = new Stac();
      
        ss.push("ffff");
        ss.push("f000");
        ss.push("0f00");
        ss.push("00f0");
        ss.push("000f");
        ss.push("ff00");
        ss.push("f0f0");
        ss.push("f00f");
        ss.push("fff0");
        ss.push("ff0f");
        ss.push("fff0");
      
      
        System.out.println(ss.pop());
        System.out.println(ss.pop());
        System.out.println(ss.pop());
        System.out.println(ss.pop());
        System.out.println(ss.pop());
        System.out.println(ss.pop());
        System.out.println(ss.pop());
        System.out.println(ss.pop());
        System.out.println(ss.pop());
      
      
    }

}
Stac.java
Java:
package Stack;

public class Stac {
    private Element last = null;
   
    public Stac(){}
   
    public String pop(){
        if(this.last == null){
            return null;
        }
        String ret = this.last.getCurrent();
        this.last = this.last.getNext();
        return ret;
    }
   
    public void push(String s){
        if(this.last == null){
            this.last = new Element(s);
        }else{
            Element iterator = last;   
            iterator.setNext(new Element(s));
           
            this.last.setNext(iterator);
            this.last = iterator;           
        }
    }
}
Element.java
Java:
package Stack;

public class Element {
    private String current;
    private Element next = null;
   
    public Element(String s){
        this.current = s;
    }
   
    public String getCurrent(){
        return this.current;
    }
    public void setCurrent(String s){
        this.current = s;
    }
   
    public Element getNext(){
        return this.next;
    }
   
    public void setNext(Element e){
        this.next = e;
    }
}
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

bist du den Code mal im Debugger durchgegangen?
Auf den ersten, schnellen Blick sieht für mich die Implementierung der push() falsch aus.

In Java gibt es übrigens auch eine Standardimplementierung, vielleicht kannst du dir davon 1-2 Ansätze abschauen:
https://docs.oracle.com/javase/8/docs/api/java/util/Stack.html
http://grepcode.com/file/repository...dk/openjdk/8u40-b25/java/util/Stack.java?av=f

Wie in den Javadocs zum Stack steht wäre aber das ArrayDeque eine "vollständigere" Implementierung:
https://docs.oracle.com/javase/8/docs/api/java/util/ArrayDeque.html
http://grepcode.com/file/repository...8u40-b25/java/util/ArrayDeque.java#ArrayDeque

Grüsse,
BK
 

DerEisige

Erfahrenes Mitglied
So nach Alkohol, Schaf und Essen habe ich jetzt in 10 min es zum laufen gebracht.
Java:
    public void push(String s){
        if(this.last == null){
            this.last = new Element(s);
        }else{
            Element last = this.last;  // Achtung Neuzeiten Methoden internes last das mit externen last gefüllt wird
            this.last = new Element(s, last);   
        }
    }

Element.java
Java:
public class Element {
    private String current;
    private Element next = null;
   
    public Element(String s){
        this.current = s;
    }
    public Element(String s, Element e){
        this.current = s;
        this.next = e;
    }
    public String getCurrent(){
        return this.current;
    }
    public Element getNext(){
        return this.next;
    }
}