//******************************************************************** // Postfissa_e.java // // Usa uno stack per valutare un'espressione in notazione postfissa. // Cattura l'eccezioni eventuali dando un messaggio generico. //******************************************************************** import cs1.Keyboard; import java.util.Stack; public class Postfissa_e { static Stack pila; public static void main(String[] args) { pila = new Stack(); System.out.println("Inserire l'espressione da esaminare"); System.out.println("(un elemento per riga, = per terminare)"); String riga = Keyboard.readString(); try { while (!riga.equals("=")) { elabora(riga); riga = Keyboard.readString(); } Integer risultato = (Integer) pila.pop(); System.out.println("Il risultato è " + risultato); } catch (Exception eccez) { System.out.println ("L'espressione contiene un errore: " + eccez.toString()); // eccez.printStackTrace(); } } public static void elabora(String s) { char primoCar = s.charAt(0); switch (primoCar) { case '+': case '-': case '*': case '/': Integer operDx = (Integer) pila.pop(); Integer operSx = (Integer) pila.pop(); Integer risultato = calcola(operSx, operDx, primoCar); pila.push(risultato); break; default: Integer numero = new Integer(s); pila.push(numero); break; } } public static Integer calcola(Integer x, Integer y, char oper){ Integer ris = null; switch (oper) { case '+': ris = new Integer(x.intValue() + y.intValue()); break; case '-': ris = new Integer(x.intValue() - y.intValue()); break; case '*': ris = new Integer(x.intValue() * y.intValue()); break; case '/': ris = new Integer(x.intValue() / y.intValue()); break; } return ris; } }