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.