Stack-Probleme

Status
Nicht offen für weitere Antworten.

Neo

Mitglied
Hallo!!!

Ich habe ein Problem! Kann ich in den Stack keine double Werte einlesen?
Wir müssen in der Schule so nen UPN-Taschenrechner machen und dafür benötigt man nen Stack!
UPN = umgekehrt polnische Notation

Und wenn ich meinen Stack füllen will dann kommt immer irgendwas mit nicht gültig für double aber wie soll ich sonst die Zahlen für den Rechner einlesen?

Vielleicht hat ja einer von euch ne idee bzw. hatte das Problem auch schon!!!

Pleas help me!!!
 

René Link

Aktives Mitglied
Hi,

ich bin mir nicht ganz sicher, was du meinst.
Ich nehme an, dass du die Klasse java.util.Stack verwendest.
Diese hat eine push- und eine pop-Methode. Die push-Methode übernimmt
ein Objekt vom Typ Object. Da double ein primitiver Datentyp ist musst du
die Wrapper-Klassen verwenden. Für jeden primitiven Datentyp gibt es eine.
Integer, Double, Boolean, Character ...

Code:
    Double aDoubleObj = new  Double(3.45);
    Stack stack = new Stack();
    stack.push(aDoubleObj);

Die double-Werte bekommst du dann über die peek- oder pop-Methode zurück.
peek gibt dir das oberste Objekt auf dem Stack zurück. Dieses bleibt allerdings
auf dem Stack liegen. pop gibt dir auch das oberste Objekt zurück. Löscht es aber
vom Stack. Da die Methoden jeweils ein Object zurückgeben, musst du casten.

Code:
    Double d = (Double) stack.pop();    // downcast in Double
    double doubleValue = d.doubleValue();


Hier noch ein netter kleiner Taschenrechner von mir. Vielleicht hilft es
dir weiter oder zeigt dir neue Wege. :D
Code:
import java.io.*;
import java.util.*;

public class Calculator {

  private String formula;
  private Stack numberStack = new Stack();

  public static final int NONE_OPERATOR = -1;
  public static final int PLUS_OPERATOR = 0;
  public static final int MINUS_OPERATOR = 1;
  public static final int MUL_OPERATOR = 2;
  public static final int DIV_OPERATOR = 3;

  public Calculator(String formula) {
    this.formula = formula;
  }

  public double calculate() {
    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    try {
      this.infixToPostfix(new ByteArrayInputStream(this.formula.getBytes()),
                          bout);
      StringTokenizer tok = new StringTokenizer(bout.toString());

      while (tok.hasMoreTokens()) {
        String token = tok.nextToken();
        if (operatorTyp(token) == Calculator.NONE_OPERATOR) {
          this.numberStack.push(Double.valueOf(token));
        }
        else {
          Number result = null;
          Number op2 = (Number)this.numberStack.pop();
          Number op1 = (Number)this.numberStack.pop();

          switch (operatorTyp(token)) {
            case Calculator.PLUS_OPERATOR:
              result = new Double(op1.doubleValue() + op2.doubleValue());
              break;
            case Calculator.MINUS_OPERATOR:
              result = new Double(op1.doubleValue() - op2.doubleValue());
              break;
            case Calculator.MUL_OPERATOR:
              result = new Double(op1.doubleValue() * op2.doubleValue());
              break;
            case Calculator.DIV_OPERATOR:
              result = new Double(op1.doubleValue() / op2.doubleValue());
              break;
          }
          this.numberStack.push(result);
        }
      }
    }
    catch (IOException ex) {
      throw new RuntimeException("can't calculate because of internal errors.");
    }
    return ( (Number)this.numberStack.pop()).doubleValue();
  }

  private int operatorTyp(String str) {
    if (str.equals("+"))
      return Calculator.PLUS_OPERATOR;

    if (str.equals("-"))
      return Calculator.MINUS_OPERATOR;

    if (str.equals("*"))
      return Calculator.MUL_OPERATOR;

    if (str.equals("/"))
      return Calculator.DIV_OPERATOR;

    return Calculator.NONE_OPERATOR;
  }

  public void infixToPostfix(InputStream infix, OutputStream postfix) throws
      IOException {
    Stack opStack = new Stack();
    StreamTokenizer infixTok = new StreamTokenizer(infix);
    PrintWriter postfixOut = new PrintWriter(postfix, true);
    int tokTyp = 0;
    String operator;
    String token;
    boolean pushed;

    infixTok.wordChars('0', '9');
    infixTok.ordinaryChar('+');
    infixTok.ordinaryChar('-');
    infixTok.ordinaryChar('*');
    infixTok.ordinaryChar('/');

    while ( (tokTyp = infixTok.nextToken()) != StreamTokenizer.TT_EOF) {
      pushed = false;
      if (operatorTyp(operator = Character.toString( (char) infixTok.ttype)) !=
          Calculator.NONE_OPERATOR) {
        token = operator;
        while (!pushed) {
          if (token.equals("+") || token.equals("-")) {
            if (opStack.isEmpty()) {
              opStack.push(token);
              pushed = true;
            }
            else
              postfixOut.print(" " + opStack.pop());
          }
          else if (token.equals("*") || token.equals("/")) {
            if (opStack.isEmpty()) {
              opStack.push(token);
              pushed = true;
            }
            else {
              String op = (String) opStack.peek();
              if (op.equals("+") || op.equals("-")) {
                opStack.push(token);
                pushed = true;
              }
              else
                postfixOut.print(" " + opStack.pop());
            }
          }
        }
      }
      else
        postfixOut.print(" " + Double.toString(infixTok.nval));
    }

    while (!opStack.isEmpty()) {
      postfixOut.print(" " + opStack.pop());
    }
    postfixOut.flush();
  }

  public static void main(String[] args) {
    Calculator calc = new Calculator("23+12+3*23/2");
    System.out.println("Result: " + calc.calculate());
  }
}
 

Nobody

Top Contributor
wenn es eine vereinfachte version sein soll gehts auch einfacher:
erstelle zb 4 variablen, dann ist die speicherung halt auf 4 einträge begrenzt.
sowas mussten wir auch mal in der schule machen und das ziel ist den aufbau des stacks zu verstehen und dazu hilft die variante mit dem selbst erstelltem minimiertem stack mehr, als die vorgefertigte klasse zu nutzen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Probleme mit stack Java Basics - Anfänger-Themen 7
T Probleme bei einen Stack der über drei Dateien funktionieren soll Java Basics - Anfänger-Themen 5
A stack Java Basics - Anfänger-Themen 14
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
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 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
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
K Stack Overflow Java Basics - Anfänger-Themen 2
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben