1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Mitglieder
  3. florian.kisser

Beiträge von florian.kisser

  • Stack

    • florian.kisser
    • 30. Oktober 2006 um 12:31

    Der Fehler is, dass der Konstruktor falsch deklariert war und deshalb nicht aufgerufen worden ist => der Stack war ein null-Objekt => NullPointerException

    wegen reset:
    Hab eine passende Stack-Funktion gesucht und nicht gefunden. Hab aber übersehen, dass clear vom Vektor vererbt wurde. Außerdem brauche ich reset garnicht; habs einfach nur so geschrieben.

  • Stack

    • florian.kisser
    • 29. Oktober 2006 um 17:12
    Zitat von beefy

    Das ist halt aber auch kein Konstruktor. :) Richtig wäre:

    Code
    public Upn() {
    }

    Ups.
    Hab vorm postn noch herumprobiert und vergessen das static rückgängig zu machen, aber das void is schon die ganze Zeit da. :shinner: Shame on me, n dummer Fehler. Hab hundermal hingeschaut und es übersehen.

  • Stack

    • florian.kisser
    • 29. Oktober 2006 um 16:40

    Garantiert kein überladener Konstruktor.

    Den Stack habe ich items getauft:

    Java
    import java.util.*;
    import java.lang.*;
    
    
    public class Upn {
        private Stack<Integer> items = new Stack<Integer>();    // Stack für die Operanden
        private int a, b;    // die beiden zu verarbeitenden Operanden - refresh() liefert neue Operanden
        public boolean stateOK = true;
    
    
        public boolean add() {    // Addition
            if (!refresh()) return false;
            push(a + b);
            return true;
        }
    
    
        public boolean sub() {    // Subtraktion
            if (!refresh()) return false;
            push(a - b);
            return true;
        }
    
    
        public boolean multi() {    // Multiplikation
            if (!refresh()) return false;
            push(a * b);
            return true;
        }
    
    
        public boolean div() {    // ganzzahlige Division
            if (!refresh()) return false;
            if (b!=0) {    // keine Division durch 0
                push(a / b);
                return true;
            } else {
                stateOK = false;
                return false;
            }
        }
    
    
        public void push(int item) {    // push-Wrapper für den Stack - wandelt int zu java.lang.Integer
            items.push(Integer.valueOf(item));
        }
    
    
        private boolean refresh() {    // liest neue Operanden aus
            try {
                b = items.pop().intValue();
                a = items.pop().intValue();
                return true;
            } catch(Exception e) {
                stateOK = false;
                return false;
            }
        }
    
    
        public String returnStack() {    // liefert den Stack bzw das Ergebnis als String
            String result = "";
    
    
            if (stateOK && !items.empty()) {
                result = items.pop().toString();
                while (!items.empty()) {
                    result = items.pop().toString() + " " + result;
                }
            }
            return result;
        }
    
    
        public void reset() {    // Zuruecksetzen (loescht den Stack und setzt den Status auf OK)
            items = new Stack<Integer>();
            stateOK = true;
        }
    
    
        public static void Upn() {    // Konstruktor
    
    
        }
    }
    Alles anzeigen

    So funktionierts, aber probier mal meine kleine Änderung wie beschrieben.

  • Stack

    • florian.kisser
    • 29. Oktober 2006 um 16:02

    Hab gerade eine total komische Erfahrung gemacht, die ich mir absolut nicht erklären kann:
    Wenn ich zuerst den Stack deklariere

    Code
    private Stack<Integer> stack;


    und das Objekt dann im Konstruktor erzeuge

    Code
    stack = new Stack<Integer>();


    dann kann ich mittels push() hinzufügen was ich möchte, er wirft immer eine NullPointerException.
    Wenn ich allerdings gleich bei der Deklaration schreibe

    Code
    private Stack<Integer> stack = new Stack<Integer>();


    führt er alles so aus wie erwartet. Kann sich das irgendjemand erklären?

Rechtliches

Impressum

Datenschutzerklärung