Hola a todos. En esta ocasión vamos (creo) a acabar con este proyecto. He estado pensando y creo que lo tengo todo más o menos en mi cabecita. Empecemos…

Para comenzar decir que le método “interprete” que habíamos creado habrá que cambiarlo bastante (al menos la primera parte). Comenzaremos con el primer algoritmo que sacaba los operandos (el más importante creo…). En el caso anterior teníamos un “Tokenizer” con el String “+-/()”, pues bien, lo cambiaremos a un "Tokenizer" más casero que en teoría separará con el String “+/()”, sí exacto, no separaremos las restas.Lo llamamos casero porque lo haremos nosotros desde cero. Convertiremos la cadena de entrada a un array de caracteres y recorreremos cada uno de los elementos. En caso de que sea un símbolo de operación o un paréntesis lo añadiremos a un “String builder” principal, y en el caso de que sea números o menos, lo añadiremos a un “String builder” secundario para operar con ellos. En este caso obtendremos cadenas de números, símbolos menos y basura (si la hubiese). Estos Strings lo intentaremos convertir a enteros. En el caso de que se pueda simplemente lo añadimos a la lista de operandos y colocamos en el “String builder” principal en lugar del número una “X”. En otro caso, no podremos convertir el String a entero, en el manejador de la excepción deberemos hacer varias cosas. Primero, debemos asegurarnos de que la entrada está compuesta solo de números y menos, en otro caso es un error sintáctico y acabamos con esta línea aquí. En el caso de que esté bien escrito nos podemos encontrar con varios casos. O un número solo con más de un menos delante, o una serie de restas, que puede comenzar con menos o no. Este último caso se tratará en un método privados a parte. En primera instancia vamos a crear el algoritmo que recorra la cadena y realice todas las operaciones básicas incluyendo la llamada al método que llamaremos: “separador”. Comenzamos…

Una vez vez acabado el algoritmo, a la segunda mitad de este (el que detectaba las operaciones y las prioridades) sólo hay que cambiarle la entrada que recibe. En lugar de la línea inicial, debemos meterle el contenido de “primario”. A partir de aquí continuará igual todo.

Además, para que funcione hemos tenido que poner algunos “parches”, como por ejemplo para que detecte los signos menos antes de los paréntesis. En cualquier otro caso, este algoritmo funciona a las mil maravillas, aunque a la hora de signos menos sin números antes de los paréntesis no hemos detectado problemas con los ejemplos que hemos probado, podrían existir algún caso para que el que no dé una solución correcta. Pasamos a comentar el código con todo los detalles posibles. Vamos a ello!

Bueno, una vez acabado los comentarios en principio habremos acabado la versión 1.0 de este pequeño programa. Nos costó un poco porque era algo ambiguo, pero la verdad que también fue divertido a la hora de ver cómo va haciendo los cálculos.

Una cosa que os quería comentar es que para poder coger a los “fallo” más pequeños, los cuales hemos solucionado mediante “parches”, hemos usado las herramientas de debug de “Eclipse” las cuales nos permiten movernos paso a paso por nuestro programa y ver los valores de las variables en cada momentos. Una maravilla, vamos…

En fin, pues esto pone fin a este proyecto, y lo damos cómo acabado. Yo sigo con la subida del archivo al servidor para que me evaluar mi trabajo el profesor de la asignatura, y ustedes son libres de descargar el archivo fuente para ejecutarlo en sus máquinas en el caso de que os interese. Muchas gracias y “FIN DE PROYECTO”.

Edito: He pasado ya la corrección automática de nuestro campus virtual de la facultad y he de deciros que estoy muy contento con el resultado. El programa ha tenido un 100 sobre 100.

Saludos,
Lázarus Surazal.

Descarga:
[Enlace eliminado]

Entradas relacionadas

Perfil
prLázarus logo info
Carlos J. Peláez Rivas (Lázarus Surazal)
Graduado y Máster en Ingeniería Informática por la Universidad de Málaga. Actualmente trabajando como desarrollador de aplicaciones en Java usando Vaadin.
Apasionado de los videojuegos, la música y alguna que otra tecnología, siempre buscando cosas nuevas que aprender y hacer.
Más sobre mi...
Contacto
Notificaciones