import java.util.*;
/*
* Évaluation d'une expression arithmétique en notation postfixée passée en arguments de la ligne
* de commande.
* Son fonctionne esrt élémentaire : lorsqu'on rencontre un nombre on l'empile, lorsqu'on recontre
* un opérateur, on dépile ses opérandes, on effectue l'opération et on empile le résultat.
* Attention: ce code ne fonctionne que si l'expression est correcte. Sauriez-vous le modifier
* de sorte que les mauvaises expressions soient détectées ?
* Sauriez-vous rajouter un opérateur unaire ? Par exemple '$' qui permettrait de changer le signe
* d'une valeur ?
* Sauriez-vous rajouter l'opérateur de division '/' ?
* Sauriez-vous rajouter un opérateur permettant de calculer le maximum d'un ensemble d'éléments, par
* exemple si la pile contient en son sommet v1, v2, vn, n alors l'opérateur M renverrait
* max(v1,v2,...vn) ?
*/
public class EvaluationPostfixee {
public static void main(String []arg) {
try {
Stack<Integer> pile = new Stack<Integer>();
for (String s : arg) {
if (s.equals("*") || s.equals("+")) {
int v1 = pile.pop();
int v2 = pile.pop();
if (s.equals("+")) {
pile.push(v1+v2);
} else if (s.equals("*")) {
pile.push(v1*v2);
}
} else {
int v = Integer.parseInt(s);
pile.push(v);
}
}
System.out.println("Resultat="+pile.pop());
} catch(Exception e) {}
}
}