import PileDEntiers; public class Calculatrice { public static void calcule(String chaine) { PileDEntiers pile = new PileDEntiers(); boolean aUneErreur = false; int pos = 0; char car; int i1, i2, res=0; while(pos < chaine.length()) { car = chaine.charAt(pos); pos++; switch (car) { case '*': case '-': case '+': case '/': if (!pile.estVide()) i1 = pile.retirer(); else { System.err.println("Erreur la pile est vide"); aUneErreur = true; break; } if (!pile.estVide()) i2 = pile.retirer(); else { System.err.println("Erreur la pile est vide"); aUneErreur = true; break; } switch (car) { case '*': res = i1*i2; break; case '+': res = i1+i2; break; case '/': if (i1 == 0) { //test non division par zero System.err.println("Erreur la division par zero est impossible"); aUneErreur = true; break; } else res = i2/i1; break; case '-': res = i2-i1; break; } System.out.println(car + " res = " + res); if (!aUneErreur) pile.ajouter(res); break; default: if (Character.isDigit(car)) pile.ajouter(Character.digit(car, 10)); else { System.err.println("Erreur ce caractere " + car + " n'est pas un chiffre"); aUneErreur = true; } } if (aUneErreur) break; } if ((aUneErreur) || (pile.estVide())) System.out.println("Impossible de calculer " + chaine + " car il y a une erreur"); else System.out.println(chaine + " = " + pile.retirer()); } public static final void main(String[] args) { if (args.length != 1) System.err.println("Vous devez mettre le calcul a faire. Exemple: java Calculatrice 12+2*"); else calcule(args[0]); } }