Calculadora Polaca

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

/*

* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to
change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this
template
*/
package calculadorapolacainversa;

import java.util.ArrayList;
import java.util.Stack;

/**
*
* @author cdmor
*/
public class RPN {

private ArrayList<String> prefija;


private Stack<String> pila;

public RPN(ArrayList<String> prefija) {


this.prefija = prefija;
this.pila = new Stack();
}

private double rpn () throws ElementoFaltante{


String eleDer, eleIzq;

for (String token : prefija) {


if (esOperador (token)) {
eleDer = pila.pop();
if(pila.isEmpty()){
throw new ElementoFaltante("Error, elemento faltante");

}
eleIzq = pila.pop();
double resultado = operar(eleIzq,token,eleDer);
pila.push(""+resultado);

}else{
pila.push(token);
}

}
return Double.parseDouble(pila.pop());
}

private boolean esOperador(String token) {


return token.equals("+")|| token.equals("-") || token.equals("*") ||
token.equals("/")
|| token.equals("%") || token.equals("^");
}

private double operar(String eleIzq, String operador, String eleDer){

double a = Double.parseDouble(eleIzq);
double b = Double.parseDouble(eleDer);
switch (operador){

case "+": return a+b;


case "-": return a-b;
case "*": return a*b;
case "/": return a/b;
case "%": return a%b;
case "^": return Math.pow(a, b);
default: return -1;
}
}
}

You might also like