Creo que ya lo he conseguido, por si alguien lo va a necesitar alguna vez:
Código:
public String calculo(String a, String b, String o) {
if(o == "*")
return String.valueOf(((Double.valueOf(a).doubleValue())*(Double.valueOf(b).doubleValue())));
if(o == "/")
return String.valueOf(((Double.valueOf(a).doubleValue())/(Double.valueOf(b).doubleValue())));
if(o == "+")
return String.valueOf(((Double.valueOf(a).doubleValue())+(Double.valueOf(b).doubleValue())));
if(o == "r")
return String.valueOf(((Double.valueOf(a).doubleValue())-(Double.valueOf(b).doubleValue())));
if(o == "¬")
return String.valueOf(Math.sin(Math.toRadians(Double.valueOf(a))));
if(o == "#")
return String.valueOf(Math.cos(Math.toRadians(Double.valueOf(a))));
if(o == "&")
return String.valueOf(Math.tan(Math.toRadians(Double.valueOf(a))));
return "0.0";
}
public String dividir(String s) {
int p1=0;
int p2=0;
String sub = "";
String sub2 = "";
String sub3 = "";
if(s.indexOf('+') >= 0 && s.indexOf('(') < 0 && s.indexOf(')') < 0) {
for(int i = 0; i < s.length()&&s.indexOf('+', i) >= 0; i++) {
p1=s.indexOf('+', i);
sub=this.dividir(s.substring(0, p1));
sub2 = this.dividir(s.substring(p1+1));
}
s = this.calculo(this.dividir(sub), this.dividir(sub2), "+");
}
if(s.indexOf('r') >= 0 && s.indexOf('(') < 0 && s.indexOf(')') < 0) {
System.out.println(s);
for(int i = 0; i < s.length()&&s.indexOf('r', i) >= 0; i++) {
p1=s.indexOf('r', i);
sub=this.dividir(s.substring(0, p1));
sub2 = this.dividir(s.substring(p1+1));
}
s = this.calculo(this.dividir(sub), this.dividir(sub2), "r");
}
if(s.indexOf('*') >= 0 && s.indexOf('(') < 0 && s.indexOf(')') < 0) {
for(int i = 0; i < s.length()&&s.indexOf('*', i) >= 0; i++) {
p1=s.indexOf('*', i);
sub=this.dividir(s.substring(0, p1));
sub2 = this.dividir(s.substring(p1+1));
}
s = this.calculo((sub), (sub2), "*");
}
if(s.indexOf('/') >= 0 && s.indexOf('(') < 0 && s.indexOf(')') < 0) {
for(int i = 0; i < s.length()&&s.indexOf('/', i) >= 0; i++) {
p1=s.indexOf('/', i);
sub=this.dividir(s.substring(0, p1));
sub2 = this.dividir(s.substring(p1+1));
}
s = this.calculo((sub), (sub2), "/");
}
if(s.indexOf('¬') >= 0 && s.indexOf('(') < 0 && s.indexOf(')') < 0) {
for(int i = 0; i < s.length()&&s.indexOf('¬', i) >= 0; i++) {
p1=s.indexOf('¬', i);
sub=this.dividir(s.substring(p1+1));
}
System.out.println(sub);
s = this.calculo((sub), null, "¬");
}
if(s.indexOf('#') >= 0 && s.indexOf('(') < 0 && s.indexOf(')') < 0) {
for(int i = 0; i < s.length()&&s.indexOf('#', i) >= 0; i++) {
p1=s.indexOf('#', i);
sub=this.dividir(s.substring(p1+1));
}
System.out.println(sub + " + " + this.calculo((sub), null, "#"));
s = this.calculo((sub), null, "#");
}
if(s.indexOf('&') >= 0 && s.indexOf('(') < 0 && s.indexOf(')') < 0) {
System.out.println(s);
for(int i = 0; i < s.length()&&s.indexOf('&', i) >= 0; i++) {
p1=s.indexOf('&', i);
sub=this.dividir(s.substring(p1+1));
}
System.out.println(sub + " + " + this.calculo((sub), null, "&"));
s = this.calculo((sub), null, "&");
}
if(s.indexOf('(') >= 0) {
for(int i = 0; i <= s.length()&& s.indexOf('(', i) >= 0; i++) {
p1 = s.indexOf('(', i);
p2 = s.indexOf(')', i);
}
sub = s.substring(0, p1);
sub2 = s.substring(p1+1,p2);
sub3 = s.substring(p2+1);
s = this.dividir(sub+(this.dividir(sub2))+sub3);
}
return s;
}
Es un poco... sucio pero bueno.. si alguien lo necesita que se sienta libre de usarlo!!, y si necesita que le explique algo... que no dude en preguntar!!
Para acabarlo habría que añadir el resto de los metodos de "Math", pero eso ya se lo dejo al que lo necesite xD.
Webness muchas gracias por la respuesta, me dio animos para ponerme con el algoritmo.
EDITO: Al situar el seno ( ¬), el coseno ( #) y la tangente (&) en ciertas posiciones salta Excepción, ahora no tengo tiempo, pero en cuanto lo solucione lo editare de nuevo
EDITO2: Ya está solucionado al parecer, la cosa es que, al buscar en el String el signo "-" para restar, cuando había un número negativo se jodia todo, asi que la solucion "parche" que le he puesto es cambiar el signo "-" de resta, por "r", para que no haya conflictos