Esempio di uso di JEP con la definizione di una nuova funzione "seno" che accetta l'angolo in gradi.
codice:
import java.util.Stack;
import org.nfunk.jep.*;
import org.nfunk.jep.function.PostfixMathCommand;
public class ProvaFunzioneJEP {
public static void main(String[] args) {
JEP jep = new JEP();
jep.addFunction("seno", new Seno());
jep.parseExpression("20 * seno(90)"); // 90 gradi!
if (jep.hasError()) {
System.out.println("ERRORE: " + jep.getErrorInfo());
} else {
double risultato = jep.getValue();
System.out.println("Risultato: " + risultato);
}
}
}
class Seno extends PostfixMathCommand {
public Seno() {
numberOfParameters = 1;
}
public void run(Stack inStack) throws ParseException {
checkStack(inStack);
Object param = inStack.pop();
inStack.push(sin(param));
}
private Object sin(Object param) throws ParseException {
if (param instanceof Number) {
double gradi = ((Number) param).doubleValue();
double radianti = Math.toRadians(gradi);
return new Double(Math.sin(radianti));
}
throw new ParseException("Invalid parameter type");
}
}
Per il codice della classe Seno che ho scritto, ho largamente preso spunto dal sorgente della classe org.nfunk.jep.function.Sine, che è quasi uguale, salvo il fatto che io ho tolto la gestione dei numeri "complessi".