/* * CalcPolonesa.java * * Created on 13 de Maio de 2006, 16:09 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ /* * CalcPolonesa.java * * Created on 15 de Maio de 2006, 03:31 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package calcpolonesa; import java.util.Scanner; /** * * @author ismael */ public class CalcPolonesa { /** Creates a new instance of CalcPolonesa */ public CalcPolonesa() { } /** * @param args the command line arguments */ public static void main(String[] args) { Stack s = new Stack(10); // Pilha para 2 números. Scanner sc = new Scanner(System.in); while( true ){ // leio a entrada retirando os brancos !!! System.out.println("Entre [numero | operador]==> "); String ent = sc.nextLine(); ent.trim(); try { // verifica se eh operador, operando ou fim if( ehFim(ent) ) { break; } else if( ehOperando(ent) ) { s.push(Float.parseFloat(ent)); } else if( ehOperador(ent) ) { switch( ent.charAt(0)) { case '+': s.push(s.pop()+s.pop()); break; case '-': s.push(s.pop()-s.pop()); break; case '*': s.push(s.pop()*s.pop()); break; case '/': s.push(s.pop()/s.pop()); break; case '=': break; } System.out.println("resultado = " + s.top()); } } catch( StackException e) { System.out.println("==> Erro na manipulacao da pilha: " + e.getMessage()); } } System.out.println("Ate logo ..."); } private static boolean ehOperador(String ent) { return ent.charAt(0) == '+' || ent.charAt(0) == '-' || ent.charAt(0) == '/' || ent.charAt(0) == '=' || ent.charAt(0) == '*'; } private static boolean ehOperando(String ent) { float n; try { n = Float.parseFloat(ent); } catch ( NumberFormatException e ) { return false; } return true; } private static boolean ehFim(String ent) { return ent.charAt(0) == '.' || ent.charAt(0) == 'q' ; } }