2017-12-19 28 views
0

Ich arbeite an einer Anwendung, die dem Benutzer eine Hand gibt, um mathematische Formeln mit Variablen zu erstellen und diese anschließend verwenden können.Store Math Formel

Beispiel einer mathematischen Formel, die der Benutzer erstellen:

A*B+ (C/D*E) 

Nach der Formel zu schaffen, kann der Benutzer es in Berechnungen verwenden, also soll ich es analysieren und die verschiedenen Variablen (in unserem Beispiel abrufen: "A, B, C, D und E") und erstellen Sie ein Formular zur Eingabe der Werte dieser Variablen.

Meine Frage ist: Wie speichere ich meine Formel?

Ich dachte an eine Zeichenfolge, die ich manuell analysieren würde, um die Variablen abzurufen, und Maths.eval verwenden, um die Formel zu berechnen. Oder sonst könnte ich meine Formel in JSON speichern, um die Wiederherstellung von Variablen danach zu erleichtern.

Was halten Sie für den richtigen Weg?

Danke

NB: Ich weiß, dass meine Frage falsch geschrieben werden kann, entschuldige ich mich.

+0

Gibt es ein spezifisches Problem bei der Durchführung dieser beiden Möglichkeiten? –

+0

Nein, ich habe mich nur gefragt, ob es einen saubereren Weg gibt, der leicht zu pflegen ist. – obiyadi

Antwort

3

Die übliche Art, solche Formeln darzustellen, zu analysieren und auszuwerten, ist Binary expression tree. Dies ist besonders nützlich, wenn man sich mit Operatorprioritäten (* vor +), Klammern usw. beschäftigen muss. Darüber hinaus ist das Traversieren von Bäumen ein natürlicher Ansatz, um solche Probleme zu lösen und verschiedene Traversierungstypen können verwendet werden (inorder, preorder, ...).

EDIT: Die Auswertung kann implemented via stack sein.

+0

Ich stimme zu, das sollte normal gemacht werden. Aber in meinem Fall sind die Formeln relativ einfach, und für die Berechnung verwende ich die ScriptEngine JavaScript: ScriptEngine engine = mgr.getEngineByName ("JavaScript"); Ich habe mich über die Persistenz der Formel gewundert, schließlich werde ich sie in einem String speichern, den ich später analysieren werde. – obiyadi

+1

Nun, wenn die Eingabe zu Ihrem Bewerter ein String ist, sehe ich keinen Grund, warum es nicht als String speichern :) Ich habe keine Erfahrung mit ScriptEngine, aber wenn Sie mit JavaScript bewerten, können Sie einfach Speichern Sie die Formel als String, so wie sie ist (mit den Variablen), und fügen Sie sie dann mit einer Variablenzuweisung voran, z. B. 'var A = 10; var B = 20; eval ("A + B"); '. –