5 votes

Expression mathématique (chaîne) vers un nombre en Java

J'essaie de trouver quelque chose comme Plugin d'intégration Java (JEP) qui peut évaluer une formule mathématique (chaîne de caractères) et donner la réponse.

Mais il doit aussi calculer une variable, par exemple : (25+36+x)*2 = 25 devrait donner : x = -11

Un peu comme http://www.wolframalpha.com/ mais il ne devrait pas être aussi polyvalent, et il devrait fonctionner hors ligne.

Les logiciels libres sont préférés.

J'en ai besoin pour mon petit projet de calculatrice, http://sourceforge.net/projects/calex/ .

3voto

Margus Points 6175

C'est ce qu'on appelle Arithmetic evaluation . L'une des façons les plus simples de mettre cela en œuvre est d'utiliser Edsger Dijkstra Algorithme de la cour de triage .

L'algorithme de triage est un algorithme de méthode d'analyse des données mathématiques mathématiques spécifiées en notation infixe. Il peut être utilisé pour produire des résultats en notation polonaise inversée (RPN) ou sous la forme d'une valeur arbre syntaxique abstrait (AST). La méthode a été inventé par Edsger Dijkstra et nommé "shunting yard" car son opération ressemble à celui d'une gare de triage. ferroviaire. Comme l'évaluation de RPN, l'algorithme l'algorithme de la gare de triage est basé sur des piles. Les expressions infixes sont la forme de notation mathématique à laquelle la plupart la plupart des gens, par exemple 3+4 ou 3+4*(2-1). Pour la conversion, il y a deux variables textuelles (chaînes), l'entrée et la sortie. l'entrée et la sortie. Il y a également une pile qui contient les opérateurs qui n'ont pas encore été ajoutés à la file d'attente de sortie. Pour convertir, le programme lit chaque symbole dans l'ordre et fait quelque chose en fonction de ce symbole.

Mais j'ai vu la solution exacte que vous recherchez sur le blog d'un utilisateur de stackoverflow, mais je ne me souviens pas de l'adresse (c'était comme 'code monkeyism'). Il s'agissait d'une classe légère, que vous pouviez utiliser dans des applets (vous pouviez également définir des constantes et réinitialiser les valeurs).

Editer : Je l'ai trouvé : http://tech.dolhub.com/Code/MathEval

Un évaluateur mathématique linéaire-récursif

Cet évaluateur d'expressions mathématiques est né du besoin de disposer d'une solution efficace et peu encombrante, capable d'évaluer des expressions arbitraires de manière raisonnablement efficace sans nécessiter de pré-compilation. J'avais besoin de quelque chose qui fasse des mathématiques de base avec des variables, des expressions comme : "Haut+2", "Bas-2" et "(Droite+1-Gauche)/2".

Une recherche sur Internet a permis de trouver un certain nombre de solutions assez bonnes, qui tournent toutes autour de la création d'arbres d'analyse (ce qui est logique). Le problème est qu'elles sont toutes assez encombrantes et que je ne peux pas me permettre d'ajouter 100K à la taille de mon applet juste pour les mathématiques. J'ai donc commencé à réfléchir à une solution récursive linéaire au problème. Le résultat final est une classe unique aux performances acceptables, sans dépendances externes, pesant moins de 10 KiB.

0voto

fasseg Points 7654

J'ai publié un évaluateur d'expression basé sur La gare de triage de Dijkstra en vertu des dispositions de l'accord sur la Licence Apache 2.0 :

http://projects.congrace.de/exp4j/index.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X