Поддерживается синтаксис выражений java и функции класса Math (acos, max ...)
В числах можно явно указывать дробную часть для точности, например Math.max(3, 5) + 10.0 / 3
package kalc;
import static java.lang.System.out;
import java.util.Scanner;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtNewMethod;
/**
*
* @author Naik
*/
public class Kalc {
/**
* @param args the command line arguments
*/
public static void main(String... args) {
out.println("Input expression and press Enter:");
Scanner myScan = new Scanner(System.in);
String expr = myScan.nextLine();
try {
ClassPool pool = ClassPool.getDefault();
CtClass evalClass = pool.makeClass("Formula");
evalClass.setInterfaces(
new CtClass[]{
pool.makeClass("kalc.Evaluator")
});
evalClass.addMethod(
CtNewMethod.make(
"public float calc() { return (float)(" + expr + ") ; }",
evalClass));
Class clazz = evalClass.toClass();
Evaluator evaluator = (Evaluator) clazz.newInstance();
out.println(evaluator.calc());
} catch (Exception e) {
e.printStackTrace();
}
}
}
/*
* File .kalc/Evaluator.java
*/
package kalc;
public interface Evaluator {
public float calc();
}