1.增加jep依賴
<dependency>
<groupId>org.scijava</groupId>
<artifactId>jep</artifactId>
<version>2.4.2</version>
</dependency>
2.計算公式
JEP本身支持的函數 如果沒有需要的函數 下文有自定義函數實現
計算 M12*3.14/4*pow(O5,2)*(K11+273-G11)/(G12*sqrt(3.14*M11*P11)) 的值 夠複雜吧
public static void main(String[] args) {
JEP jep = new JEP();
// 添加常用函數
jep.addStandardFunctions();
// 添加常用常量
jep.addStandardConstants();
String exp = "M12*3.14/4*pow(O5,2)*(K11+273-G11)/(G12*sqrt(3.14*M11*P11))"; //給變量賦值
jep.addVariable("M12", 1.1);
jep.addVariable("O5", 11.28665296);
jep.addVariable("K11", 25);
jep.addVariable("G11", 200);
jep.addVariable("G12", 100000);
jep.addVariable("M11", 0.000000129);
jep.addVariable("P11", 10);
try { //執行
jep.parseExpression(exp);
double result = jep.getValue();
System.out.println("計算結果: " + result);
} catch (Throwable e) {
System.out.println("An error occured: " + e.getMessage());
}
}
完全不是問題
3.實現自定義函數 min max
min函數 兩數取最小值
public class Min extends PostfixMathCommand {
public Min() {
super();
// 使用參數的數量
numberOfParameters = 2;
}
@Override
public void run(Stack inStack) throws ParseException {
//檢查棧
checkStack(inStack);
Object param2 = inStack.pop();
Object param1 = inStack.pop();
if ((param1 instanceof Number) && (param2 instanceof Number)) {
double p1 = ((Number) param2).doubleValue();
double p2 = ((Number) param1).doubleValue();
double result = Math.min(p1, p2);
inStack.push(new Double(result));
} else {
throw new ParseException("Invalid parameter type");
}
return;
}
}
max函數 兩數取最大值
static class Max extends PostfixMathCommand {
public Max() {
super();
// 使用參數的數量
numberOfParameters = 2;
}
@Override
public void run(Stack inStack) throws ParseException {
//檢查棧
checkStack(inStack);
Object param2 = inStack.pop();
Object param1 = inStack.pop();
if ((param1 instanceof Number) && (param2 instanceof Number)) {
double p1 = ((Number) param2).doubleValue();
double p2 = ((Number) param1).doubleValue();
double result = Math.max(p1, p2);
inStack.push(new Double(result));
} else {
throw new ParseException("Invalid parameter type");
}
return;
}
}
驗證是否好用
public static void main(String[] args) {
JEP jep = new JEP();
// 添加常用函數
jep.addStandardFunctions();
// 添加常用常量
jep.addStandardConstants();
// 添加自定義函數
jep.addFunction("min", new Min());
jep.addFunction("max", new Max());
String min = "min(A1,A2)";
String max = "max(A1,A2)";
jep.addVariable("A1", 1.1);
jep.addVariable("A2", 2.3);
try { //執行
jep.parseExpression(min);
double minResult = jep.getValue();
jep.parseExpression(max);
double maxResult = jep.getValue();
System.out.println("最小值爲: " + minResult);
System.out.println("最大值爲: " + maxResult);
} catch (Throwable e) {
System.out.println("An error occured: " + e.getMessage());
}
}
完全沒問題