[noResuelto] Ayuda con String que contiene una ecuación en Java

Iniciado por romemarce, 18 Septiembre 2016, 02:45 AM

0 Miembros y 1 Visitante están viendo este tema.

romemarce

Hola, necesito tu ayuda para resolver un problema, Supongamos que tenemos un:
String cuenta = "5+5(5+8*7)/4";

La pregunta es simple, averiguar el resultado de la operación.

Hasta ahora solo e implementado 2 posibles soluciones que terminaron en fracaso.

La primera opción que se me ocurrió fue resolver a través de paréntesis es decir:
Transformar nuestro string :

" 5+5(5+8*7)/4 "

, a la siguiente manera

"5+(5(5+(8*7)))/4 "

Esta opción es interesante pero se complica a la hora de remplazar y/o añadir un ' ( ';

La segunda opción es básicamente buscar en nuestro String el ultimo o mejor dicho el mas chico conjunto de parentesis y resolverlo, es decir " (5+8*7) ", pero cual es el problema en este caso, que no encuentro la manera de darle prioridad a que calcule primero la multiplicación o división antes que la suma o resta, para ser mas claro: 5+8*7 = 13*7 = 91, parece de retrasado pero así lo entiende la maquina.

Que manera u opción es la mas fácil y como lo harían, si tienen otra alternativa sera bien recibida.

PD: Si se le ocurre algún algoritmo para resolverlo, y no saben como expresarlo en java, también sera bien recibido, cualquier opinión me sirve.

Desde ya muchas gracias, este fue mi primer post, y fui lo mas detallado posible.

.rn3w.

creo que la mejor opcion es utilizar la estructura Pila y cada vez que desapilas verificas si es numero o operador.
nota: usa la notacion prefija, es decir por ejemplo, + 4 5 el resultado es 9

engel lex

El algoritmo si va a ser un poco largo pero simple

Crea un array, si hay números seguidos los guarda con sus operadores, si hay un parentesis, lo guarda como una dimension adicional del array, ej

5+5(5+8*7)/4
Array[0]=5
Array[1]=+
Array[2]=5
Array[3][0]=5
....
Array[3][4]=7
Array[4]=/
Array[5]=4


Luego resuelves las operaciones mas anidadas (dentro de mas corchetes)
Para resolver cualquier operacion tomas todos los numeros y los colocas en un nuevo array, para  pasarlos por filtro de prioridad, es decir si hay un * primero resuelves los números a sus lados (multiplicación ) y rearmas el array con los resultados (y menos indices) hasta que el largo del array sea 1... haces esto con todos los anidados hasta que no quede sino el array principal y resuelves... no esta de más añadir que si te quedan 2 números en indices consecutivos puedes agregar en medio el * para que el proceso sea lineal y predecible
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.