import java.util.*; /** * Lancement : java Calcul 1 2 + (par exemple) * ou : java Calcul 1 2 + 4 * 4 5 6 + + * */ public class Calcul { public static void main(String []args) { Stack<Integer> pile = new Stack<Integer>(); System.out.println(pile); /* * On prend les arguments de la ligne de commande un par un */ for (int i=0; i<args.length; i++) { String s = args[i]; // s est l'argument d'index i if (s.equals("+")) { // S'il s'agit d'une addition if (pile.empty()) { // que la pile n'est pas vide System.err.println("pas de valeurs"); System.exit(1); } int e1 = pile.pop(); // on récupère une opérande if (pile.empty()) { // si la pile n'est toujours pas vide System.err.println("pas assez de valeurs"); System.exit(1); } int e2 = pile.pop(); // on récupère la seconde opérande int somme = e1+e2; // on en effectue la somme pile.push(somme); // le résultat de la somme est placé en sommet de pile } else if (s.equals("*")) { // idem pour la multiplication if (pile.empty()) { System.err.println("pas de valeurs"); System.exit(1); } int e1 = pile.pop(); if (pile.empty()) { System.err.println("pas assez de valeurs"); System.exit(1); } int e2 = pile.pop(); int produit = e1*e2; pile.push(produit); } else { // l'argument n'est ni une addition ni une multiplication int v = Integer.valueOf(s); // on transforme la chaîne en une valeur entière pile.push(v); // on place cette valeur dans la pile } System.out.println(pile); } // lorsqu'on a terminé int r = pile.pop(); // on récupère le sommet de pile if (pile.empty()) { // si il n'y a plus rien dans la pile c'est qu'on a le résultat System.out.println("Le résultat est "+r); } else { System.err.println("mauvaise expression"); } } }