请使用JEP包,使用JAVA编写完成以下任务的程序 :
从控制台输入 数学计算公式 如 ((KM)/(X+Y)) ,解析公式的变量并从控制台输入值,同时支持+、-、、/ ,()基本数据符号,进行公式计算,并得到正确的结果,需要考虑超大数字,请使用BigDecimal类完成超大数据的运算。
如有可能,请支持 IF ,AND,OR 等逻辑操作 。
上述技术要求往往出现在目前企业HR系统中,比如可以对某人,某一类员工的薪资福利进行公式计算,系统往往需要有公式设置的功能,希望大家能够思考并掌握技术方法。(动态公式配置与运算)
1、导入JEP包
2、代码段
package mathMatical;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import com.singularsys.jep.Jep;
import com.singularsys.jep.JepException;
public class MainOne {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.print("请输入计算公式:");
Jep jep = new Jep(); //一个数学表达式
String exp = scanner.nextLine(); //给变量赋值
char[] stringArr = exp.toCharArray();
List<String> list = new ArrayList<String>();
for (int i = 0; i < stringArr.length; i++) {
char c = stringArr[i];
//char本质是ACSII码,与数字比较
if (c >= 97 && c <= 122) {
String s = String.valueOf(c);
// System.out.println(s);
if(!list.contains(s)) {
list.add(s);
}
}
}
// System.out.print("去除重复后的list集合"+list);
// Object[] objects = list.toArray();//返回Object数组
// System.out.println("objects:"+Arrays.toString(objects));
try {
for (int i = 0; i < list.size(); i++) {
System.out.println("请对 " + list.get(i) + "进行赋值:");
float temp = scanner.nextFloat();
// 为变量赋值
jep.addVariable(list.get(i), new BigDecimal(String.valueOf(temp)));
// String temp = scanner.nextLine();
// jep.addVariable(list.get(i), new BigDecimal(temp));
}
jep.parse(exp);
Object result = jep.evaluate();
System.out.println("计算结果: " + result);
} catch (JepException e) {
// TODO Auto-generated catch block
System.out.println("An error occured: " + e.getMessage());
}
}
}