[JAVA] Konvertieren Sie die Formel in die inverse polnische Notation

Überblick

Dies ist ein Beispielprogramm, das mathematische Formeln in die inverse polnische Notation konvertiert. Algorithmusquelle: http://www.gg.e-mansion.com/~kkatoh/program/novel2/novel208.html Formelquelle: http://www.wdic.org/w/SCI/%E9%80%86%E3%83%9D%E3%83%BC%E3%83%A9%E3%83%B3%E3%83%89%E8%A8%98%E6%B3%95

Vielen Dank

Einzelheiten

Es wird nur basierend auf der Formel in polnische Notation konvertiert. Da der Algorithmus nur in Java erstellt wurde, möchte ich mich bei der Zitierquelle bedanken.

Rpn.java


/**
 *Algorithmus Zitat: http://www.gg.e-mansion.com/~kkatoh/program/novel2/novel208.html
 */
public class Rpn {
    public static void main(String[] args) {
        //Ausdruck Zitat: http://www.wdic.org/w/SCI/%E9%80%86%E3%83%9D%E3%83%BC%E3%83%A9%E3%83%B3%E3%83%89%E8%A8%98%E6%B3%95
        String formula = "a+b"; // ab+
//        String formula = "a+(b*c)"; // abc*+
//        String formula = "(a+b)*c"; // ab+c*
//        String formula = "a*b+c*d+e*f"; // ab*cd*ef*++
//        String formula = "((a+b)*(c+d)+e)*f"; // ab+cd+*e+f*

        System.out.println(getRpn(formula));
    }

    /**
     *Konvertieren Sie die Formel in die inverse polnische Notation.
     *
     * @Parameterformel Inverse polnische Notation Zu konvertierende Formel
     * @Rückgabeformel in umgekehrte polnische Notation umgewandelt
     */
    public static String getRpn(String formula) {
        char[] sequenceList  = formula.toCharArray();
        //StringBuilder zum Speichern des Rückgabewerts
        StringBuilder resultBuilder = new StringBuilder(sequenceList.length);
        Deque<Character> stack = new ArrayDeque<>();

        //Setzen Sie die Schleife fort, bis alle Formeln in die inverse polnische Notation konvertiert sind
        for(char token : sequenceList){
            switch (token) {
                case '+':
                case '-':
                    //Wenn die Priorität des Stapeloperators niedriger ist, wird der Stapeloperator in den Puffer gestellt.
                    while (!stack.isEmpty()) {
                        char c = stack.getFirst();
                        if (c == '*' || c == '/') {
                            resultBuilder.append(stack.removeFirst());
                        } else {
                            break;
                        }
                    }
                    stack.addFirst(token);
                    break;
                case '*':
                case '/':
                case '(':
                    stack.addFirst(token);
                    break;
                case ')':
                    // 「(Von ")Operatoren bis zu "zu puffern
                    List<Object> list = Arrays.asList(stack.toArray());
                    int index = list.indexOf('(');

                    Deque<Character> workStack = new ArrayDeque<>();
                    for (int i = 0; i <= index; i++) {
                        char c = stack.removeFirst();
                        if (c != '(') {
                            workStack.addFirst(c);
                        }
                    }

                    while (!workStack.isEmpty()) {
                        resultBuilder.append(workStack.removeFirst());
                    }
                    break;
                default:
                    //Im Falle eines numerischen Wertes
                    resultBuilder.append(token);
                    break;
            }
        }

        while (!stack.isEmpty()) {
            resultBuilder.append(stack.removeFirst());
        }
        return resultBuilder.toString();
    }
}

Am Ende

Bitte lassen Sie mich wissen, wenn es einen Fehler gibt. Wenn es keine Fehler gibt, benutze sie bitte (lacht) Vielen Dank an das Internet, dass Sie die Informationen, die Sie wissen möchten, aus der Quelle erhalten haben.

Recommended Posts

Konvertieren Sie die Formel in die inverse polnische Notation
Einführungsnotation → Inverse polnische Notation → Ich habe versucht zu berechnen
[Gehirnübungen] Inverse polnische Notationszählung und ihre Berechnung
Konvertieren Sie ein Java-Byte-Array in eine hexadezimale Zeichenfolge
Ich möchte Zeichen konvertieren ...
Konvertieren Sie den Zeichenfolgentyp in den Zeitstempeltyp
In Ruby Leet-Zeichenfolge konvertieren
Konvertieren Sie ein serialisierbares Objekt in Byte []
Konvertieren Sie von ○ Monaten in ○ Jahre ○ Monate
So konvertieren Sie Java Base
[Java] Konvertiert ArrayList in Array