Bonjour !
Alors voila, je débute en Java et je n'ai pas trop d'expérience donc avec les diverses mécaniques.
Dans le cadre d'un projet, je suis amené à faire une sorte de calculatrice en ligne de commandes avec un fichier intrant et trois sortants. L'intrant prend un calcul sous forme complètement parenthésée.
Les sortants doivent produire l'évaluation, la forme polonaise et la forme polonaise inversée de ce calcul.
Pour la notation polonaise inversée, pas de soucis, avec une pile c'est passé tout seul.
Mais là je suis à l'évaluation du calcul. J'ai produit ce code (qui, je m'en aperçois, pourra être grandement simplifié et je m'y attellerai si ce code peut être productif)
Et ainsi de suite, je n'ai pas tout mis puisqu'après c'est pratiquement du c/c.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public String eval(String s) { StringBuffer eval = new StringBuffer(); eval = getReversePolish(s); StringBuffer tempEval = new StringBuffer(); tempEval = eval; int temp=0; double temp2=0; for(int k = 0; k<tempEval.length();k++){ if(tempEval.charAt(k)=='+'){ temp = Integer.parseInt(Character.toString(tempEval.charAt(k-4)))+Integer.parseInt(Character.toString(tempEval.charAt(k-2))); tempEval.replace(k-4, k+1, Integer.toString(temp)); temp=0; k=0; } } return eval.toString(); }
Donc le code fait appel à une autre méthode (fonctionnelle) "getReversePolish()" qui va renvoyer la notation polonaise inversée. Par exemple ( 1 + 1 + 1 ) sur appel devient 1 1 + 1 + (espaces importants).
Et je compte en fait agir sur la NPI plutôt que sur le calcul initial, cela me semble plus facile.
Le problème est que j'utilise un StringBuffer et que, chose que j'ai découvert à mon grand désarroi, il prend les nombres comme deux chiffres ! 10 n'est pas value=10 mais value1=1 et value2=0.
Donc le code fonctionne bien pour des opérations sur des chiffres, mais pas sur les nombres ! (19 + 1 ) donne 110 saperlotte !
Ainsi je me tourne vers vous pour savoir s'il y a moyen de convertir ce StringBuffer en quelque chose d'utilisable, ou bien si je me suis complètement fourvoyé en voulant partir de ce côté là.
Bien à vous,
Dranna
Partager