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) {} } }