Hay ocasiones en las que se necesita hacer una operación matemática simple en tiempo de ejecución de un programa. Como cuando se insertá una pequeña calculadora a un sistema de cobro de una tienda.
El problema comienza cuando se llega a una situación en la que si no se hace el cálculo en el orden correcto el resultado final puede llegar a ser erróneo, por ejemplo:
2+3*4
Resultados |
---|
20 |
14 |
¿Cuál de los dos es el resultado correcto? Bueno el resultado es 12, debido a que primero se tiene que multiplicar y luego dividir, esto lo indican las reglas de PEDMAS.
Esta notación viene basada en la notación pocala inversa y la cual tiene una explicación más profunda en la wiki del proyecto, pero en general es la conversión de una cadena a un conjunto de subexpresiones leyendo de izquierda a derecha la sentencia.
Expresion: 2*3+6/(3+3)
Notacion robertiana: ([{[2.0][3.0] *}][{[6.0][([3.0][3.0][0.0] ++)] /}][0.0] ++)
El siguiente proyecto intenta dar una solución a este problema, otorgando una herramienta con la cual podamos hacer estos cálculos de manera sencilla. Hay dos clases que se pueden utilizar para estos fines, las cuales serían:
- Calculadora Esta clase nos permite validad la expresión, si es que no tenemos una manera de estar seguros que la información ingresada por el usuario sea correcta, por ejemplo:
String expresion = "4+2(9)";
Calculadora calculadora = Calculadora.getInstancia();
calculadora.setSentencia(expresion);
if(calculadora.isValido()){
System.out.println(calculadora.getResultado());
}else{
System.out.println(calculadora.showValidacion());
}
- Robertiano Si ya se tiene un sistema que valide la expresión, se puede usar directamente la clase que efectúa el cálculo sin necesidad de gastar recursos revalidando la expresión, por ejemplo:
String expresion = "4-(-6)";
Robertiano robertiano = new Robertiano(expresion);
double resultado = robertiano.getResultado();
System.out.println(resultado);