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");
}
}
}