Buenas noches, estoy haciendo un programa en java que apartir de un String que tiene una operacion matematica por ejemplo "5+7*3-56/5+45". esto tiene que quedar en un arbol binario y luego resolverse. Yo tenia planeado contar cuantos signos hay y dividirlo en 2 para que el gigno de la mitad sea la raiz y con subString poner la parte derecha de signo en el hijo derecho y la izquierda en el hijo izquierdo y hacer recursividad hasta completar el arbol. pero el problema es que nose como obtener la posicion del signo de la mitad, por el momento solo se cuantos signos hay y pensaba hacer un arreglo que me guardara los numeros haciendo un split para que omita los signos
String x="785+6-7*4/4+9+445";
String separadores = "[\\+\\-\\*\\/]";
String z[] = x.split(separadores);
for(int i=0;i<z.length();i++){
System.out.println(z);
}
con esto logro guardar en un espacio los numeros de varios digitos pero no se como meter los signos en ese arreglo. espero me haya echo entender y de antemano gracias por su ayuda.
Ostia macho, tu descripción incomoda, bueno a mi algo,
Mmmm, Te refieres al signo del medio cual ? String x = "785+6-7*4/4+9+445";
Cita de: Pipe99 en 25 Abril 2018, 03:07 AM
con esto logro guardar en un espacio los numeros de varios digitos pero no se como meter los signos en ese arreglo. espero me haya echo entender y de antemano gracias por su ayuda.
con el método .insert() de la clase StringBuilder puedes meter esos signos que deseas en cualquier parte de tu String
0 - El árbol binario que pides, al caso dado, se llama arbol sintáctico.
1 - La función split, no vale, porque corta por los caracteres pedidos, dejando fuera esos caracteres qe son los operadores.
2 - Además, el operador de asignación '=', lo quedas fuera. Lo mismo que a x. 'x' es una variable, que debe ser tratado exactamente igual que si fuera un número.
3 - Toda la operatoria debe ser un bucle, que recorra buscando bytes o caracteres, reconozca numeros/variables/identificadores (como en el siguiente ejemplo) por un lado y operadores por otro. Los paréntesis también son operadores, en este caso de prioridad (se resuelve lo que está dentro antes de resolver lo de más afuera).
x = (j * k) + 5 - ((n * 7) + cantidad)
4- Debes considerar la prioridad de los operadores, a falta de paréntesis, se deben seguir las reglas de precedencia de operadores, y la estructura adecuada para mediar con el bucle y el árbol es una pila.
5 - Con un árbol sintáctico, los nodos terminales siempre contienen el operando (número, variable...) y los nodos internos contienen el operador, quedando el operador en medio de los operandos se conoce como notación infija
6 - Tal vez te interese seguir otro modelo. Revisa la notación polaca inversa, donde los 2 operandos quedan juntos antes del operador.
nota: te he marcado en negrita, todo aquello que puedes buscar en google, para profundizar...