Foro sobre Java SE > Ayuda en código java
Que yo sepa no hay ningún método que te lo haga solo.
Pero te he hecho un método que te calcula ecuaciones de segundo grado con una incógnita. Tienes que pasar-le cadenas al estilo: x^2+5x+4=0 (igual a 0!!)
El código no está muy optimizado pero funciona. Tendrías de revisar posibles errores y realizar tu la optimización. Por último tienes que saber que devuelve un array de 3 posiciones, la tercera posición, contiene un número siempre del 0 al 2. Si es 0, la ecuación no tiene solución, si es 1, la ecuación tiene una sola solución, si es 2, tiene dos soluciones. Las dos otras posiciones la 1 y la 2, son los resultados! Ejemplo de funcionamiento: Si devuelve 1, tan solo tienes que consultar el valor en la posición 0. Si devuelve 2, tienes que consultar para obtener los valores la posición 0 y 1
public static double[] solve(String ecuacion){
int coeficienteX2;
int coeficienteX;
int terminoNumerico;
//Limpiamos espacios y ponemos todo en minúsculas
ecuacion=ecuacion.trim();
ecuacion=ecuacion.toLowerCase();
//Miramos si la x^2 es negativa, si lo es cambiamos el símbolo.
if(ecuacion.charAt(0)=='-'){
String simbolosCambiados="";
for(char caracter:ecuacion.toCharArray()){
if(caracter=='+')
simbolosCambiados = simbolosCambiados + "-";
else if(caracter == '-')
simbolosCambiados = simbolosCambiados + "+";
else
simbolosCambiados = simbolosCambiados + caracter;
}
ecuacion = simbolosCambiados;
}
//Buscamos el coeficient de la incognia elevada a dos (x^2)
if(Character.isDigit(ecuacion.charAt(0)))
coeficienteX2=Integer.parseInt(ecuacion.substring(0,ecuacion.indexOf("x")));
else
//Si no es un digito sera la x, luego su coeficiente es 1
coeficienteX2=1;
//Buscamos el coeficiente de la x
if(Character.isDigit(ecuacion.charAt(ecuacion.indexOf("^2")+3))){
int desplazamiento=0;
if(ecuacion.charAt(ecuacion.indexOf("^2")+2)=='+')
desplazamiento=1;
coeficienteX=Integer.parseInt(ecuacion.substring(ecuacion.indexOf("^2")+2+desplazamiento,ecuacion.indexOf("x", ecuacion.indexOf("^2")+2+desplazamiento)));
}else //Si no es un digito sera la x, luego su coeficiente es 1
coeficienteX=1;
//Buscamos el termino independiente
terminoNumerico = Integer.parseInt(ecuacion.substring(ecuacion.indexOf("x",ecuacion.indexOf("x")+1) +2, ecuacion.indexOf("=")));
//solucionamos la ecuacion
double resultadoRaiz = Math.sqrt(Math.pow(coeficienteX, 2)-(4*coeficienteX2*terminoNumerico));
double raizPositiva = (-coeficienteX+resultadoRaiz)/(2*coeficienteX2);
double raizNegativa = (-coeficienteX-resultadoRaiz)/(2*coeficienteX2);
double[] resultado = new double[3];
if(Math.pow(coeficienteX, 2)-(4*coeficienteX2*terminoNumerico)<0){ //Si es el resultado de la raiz es menor que 0 no tiene resultado, porqué no existe la raíz de un numero negativo
resultado[0]=0;
resultado[1]=0;
resultado[2]=0;
}else if (Math.pow(coeficienteX, 2)-(4*coeficienteX2*terminoNumerico)==0){ //Si es igual a 0 tiene una solucion
resultado[0]=raizPositiva;
resultado[1]=0;
resultado[2]=1;
}else{
resultado[0]=raizPositiva;
resultado[1]=raizNegativa;
resultado[2]=2;
}
return resultado;
}
Solucionado un bug con los números negativos!
public static double[] solve(String ecuacion){
int coeficienteX2;
int coeficienteX;
int terminoNumerico;
//Limpiamos espacios y ponemos todo en minúsculas
ecuacion=ecuacion.trim();
ecuacion=ecuacion.toLowerCase();
//Miramos si la x^2 es negativa, si lo es cambiamos el símbolo.
if(ecuacion.charAt(0)=='-'){
String simbolosCambiados="";
for(char caracter:ecuacion.toCharArray()){
if(caracter=='+')
simbolosCambiados = simbolosCambiados + "-";
else if(caracter == '-')
simbolosCambiados = simbolosCambiados + "+";
else
simbolosCambiados = simbolosCambiados + caracter;
}
ecuacion = simbolosCambiados.substring(1, simbolosCambiados.length());
}
//Buscamos el coeficient de la incognia elevada a dos (x^2)
if(Character.isDigit(ecuacion.charAt(0))){
coeficienteX2=Integer.parseInt(ecuacion.substring(0,ecuacion.indexOf("x")));
}else
//Si no es un digito sera la x, luego su coeficiente es 1
coeficienteX2=1;
//Buscamos el coeficiente de la x
if(Character.isDigit(ecuacion.charAt(ecuacion.indexOf("^2")+3))){
int desplazamiento=0;
if(ecuacion.charAt(ecuacion.indexOf("^2")+2)=='+')
desplazamiento=1;
coeficienteX=Integer.parseInt(ecuacion.substring(ecuacion.indexOf("^2")+2+desplazamiento,ecuacion.indexOf("x", ecuacion.indexOf("^2")+2+desplazamiento)));
}else //Si no es un digito sera la x, luego su coeficiente es 1
coeficienteX=1;
//Buscamos el termino independiente
int desplazamiento = 0;
if(ecuacion.charAt(ecuacion.indexOf("x",ecuacion.indexOf("x")+1) +1)=='+')
desplazamiento++;
terminoNumerico = Integer.parseInt(ecuacion.substring(ecuacion.indexOf("x",ecuacion.indexOf("x")+1) +1+desplazamiento, ecuacion.indexOf("=")));
//solucionamos la ecuacion
double resultadoRaiz = Math.sqrt(Math.pow(coeficienteX, 2)-(4*coeficienteX2*terminoNumerico));
double raizPositiva = (-coeficienteX+resultadoRaiz)/(2*coeficienteX2);
double raizNegativa = (-coeficienteX-resultadoRaiz)/(2*coeficienteX2);
double[] resultado = new double[3];
if(Math.pow(coeficienteX, 2)-(4*coeficienteX2*terminoNumerico)<0){ //Si es el resultado de la raiz es menor que 0 no tiene resultado, porqué no existe la raíz de un numero negativo
resultado[0]=0;
resultado[1]=0;
resultado[2]=0;
}else if (Math.pow(coeficienteX, 2)-(4*coeficienteX2*terminoNumerico)==0){ //Si es igual a 0 tiene una solucion
resultado[0]=raizPositiva;
resultado[1]=0;
resultado[2]=1;
}else{
resultado[0]=raizPositiva;
resultado[1]=raizNegativa;
resultado[2]=2;
}
return resultado;
}
Muchisimas gracias por la ayuda! voy a ver como lo adapto para lo que necesito! te agradezco inmensamente saludos!!
Buenas a todos en el foro!
Quisiera saber si hay algun método o clase en java que despeje una incognita en una ecuación por ejemplo: x^2+5.x+4 = P, donde tendria que encontrar el valor de x, ya que el valor de P es conocido! Como en otros lenguajes de programación existe el método solve alguien podria ayudarme! o tendria que crear un método para realizar esta operación.
Porfavor les agradeceria eternamente por su ayuda!
Alex Heredia!