Java Postfix --> Infix

  • Kann mir jemand allgemein erklären, wie ich einen gegebenen Postfix Ausdruck in einen geklammerten Infix Ausdruck umwandeln kann in Java !

    Ich muss eine Methode schreiben, die das realisiert.



    MfG

  • am besten gehst du es mit einer baumstruktur an: wenn du z.b. "5 3 3 8 + - * 2 +" gegeben hast, dann faengst du von hinten an, die baumelemente aufzubauen: operatoren sind knoten, zahlen sind blaetter.

    Code
    ....+
    .../ \
    ..*  2
    ./ \
    5   -
    .../ \
    ...3  +
    ...../ \
    .....3  8

    und jetzt den baum von links nach rechts auslesen (auf die klammern nicht vergessen - am einfachsten ist es, immer klammern zu setzten, auch wenn es eigentlich gar nicht noetig waere, wie z.b. in "3+(3+3)" :(
    (5*(3-(3+8)))+2
    hoffe, das hilft dir weiter

    [edit] verruckelten baum layouten

  • Zitat von WhiteFist

    Kann mir jemand allgemein erklären, wie ich einen gegebenen Postfix Ausdruck in einen geklammerten Infix Ausdruck umwandeln kann in Java !

    Ich muss eine Methode schreiben, die das realisiert.

    also ich tät da nicht mit einem baum herumtun sondern das ganze gleich rekursiv machen... (dh. eine methode die sich selbst aufruft)

    ich versuch das ganze mal als (java-tauglicher) pseudocode (bin zu faul über die genaue syntax nachzudenken, ausserdem kenn ich deine vorgaben nicht)

    String convert () {
    String tok = getLastToken();
    if (tok ist eine Zahl)
    return tok;
    else {
    String string1 = convert();
    String string2 = convert();
    return "(" + string2 + tok + string1 + ")";
    }
    }

    erklärung zu getLastToken():
    konsumiert das letzte token von der eingabe (ein token ist entweder ein operator oder eine zahl) und liefert es als string zurück.
    da postfix relativ ungünstig für meine funktion ist lese ich das ganze einfach als prefix ein, dh. immer das letzte token zuerst.
    zum zerlegen der eingabe in token würd ich übrigens die stringbuffer klasse verwenden, die is echt praktisch...

    weitere details von convert():
    Damit dann die reihenfolge der operanden nicht umgedreht wird verwende ich beim rückgabestring zuerst string2 und dann erst string1 (das is notwendig da ich ja von hinten einlese)

    die funktion geht übrigens davon aus das mindestens ein token vorhanden ist...


    hoffe geholfen zu haben... bei fragen bitte melden :D

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!