A ti te funciona?, a mi no.
Estas cosas me matan, int n = 3^3^3 es válido y por lo que he podido ver no hay nada en Integer que acepte este formato y lo que es es peor "3*3" por ejemplo.
Para poder evaluar la expresión anterior sin usar ScriptEngine solo se me ocurre descomponerla pero podríamos acabar cortándonos la venas
int n = Integer.parseInt("3") ^ Integer.parseInt("3") ^ Integer.parseInt("3");
lo que se podría traducir a algo parecido a
Código: Seleccionar todo
String p(String s){
String[] l = {};
if(s.startsWith("-~")) l = s.split("-~");
else l = s.split("\\^");
Integer ret = 0;
if(s.startsWith("-~")){
if(l.length>2) ret = -~-~ Integer.parseInt(l[2]);
else ret = -~ Integer.parseInt(l[1]);
}
else if(l.length==1) ret = Integer.parseInt(s);
else{
for(int i=0;i<l.length;i++){
ret = ret ^ Integer.parseInt(l[i]);
}
}
return ret.toString();
}
que con las expresiones que nos solemos encontrar
Código: Seleccionar todo
System.out.println("\"0^3^3\" = " + p("0^3^3")); // 0
System.out.println(" \"-~0\" = " + p("-~0")); // 1
System.out.println(" \"1\" = " + p("1")); // 1
System.out.println("\"-~-~0\" = " + p("-~-~0")); // 2
System.out.println(" \"-~1\" = " + p("-~1")); // 2
System.out.println("\"-~-~1\" = " + p("-~-~1")); // 3
System.out.println("\"3^3^3\" = " + p("3^3^3")); // 3
System.out.println(" \"-~3\" = " + p("-~3")); // 4
System.out.println(" \"4\" = " + p("4")); // 4
nos delvolvería
Código: Seleccionar todo
"0^3^3" = 0
"-~0" = 1
"1" = 1
"-~-~0" = 2
"-~1" = 2
"-~-~1" = 3
"3^3^3" = 3
"-~3" = 4
"4" = 4
PD: Lo que no recuerdo por que no te funciona ScriptEngine, me suena algo del foro Desarroladores