2012-04-22 38 views
4

有沒有辦法創建如下的函數?未知公式的包裝函數

我需要計算三角形的面積,我不記得計算這個的正確公式,沒有互聯網或其他信息來源給我。我記得的是,這種功能的論點是某一方b和高度h。所以我想創造一些功能,這將是這樣的:

public static void calculate(String forgottenFunc, int... params) {/*implementation*/}; 

我想實現基於從爪哇JavaScript的eval函數的,withough使用正則表達式。我被困在轉換字符串(forgottenFunc)爲一些真正的函數,它會使用給定的參數來計算我需要的。或者Python的eval或其他功能的任何替代品。 謝謝

+0

要計算一個trian的區域gle,使用A = bh/2 – DankMemes 2012-04-22 21:47:15

+1

我不認爲你試圖找到答案。計算三角形面積的方法有很多,維基百科提供了[10個獨立的部分](http://en.wikipedia.org/wiki/Triangle#Computing_the_area_of_a_triangle)。 – Darthfett 2012-04-22 21:47:17

+3

我認爲「計算三角形的面積」只是一個例子。 John grey真正要問的是java是否有閉包。 – emory 2012-04-22 21:49:09

回答

1

嘗試Jep,一個免費的Java數學解析器。

0

根據你的意見,我看到你想要一個解析器,而不是一個閉包。

JavaScript eval函數沒有內置的等價物。它被認爲是邪惡的。

您可以使用第三方分析器,如zovegames suggests或使用諸如javacc之類的東西來構建您自己的分析器。

0

對於一般的解決方案:您可以在程序中嵌入MVEL,將公式作爲字符串傳遞,綁定參數並對其進行評估。從鏈接頁面:

MVEL是一種用於基於Java的應用程序的強大表達式語言。它提供了大量的功能,適用於從最小的屬性綁定和提取到完整的腳本。

1

mXparser將滿足您的需求:-)請按照下面的例子:

import org.mariuszgromada.math.mxparser.*; 
... 
... 
public static double calculate(String forgottenFunc, double... params) { 
    Function f = new Function(forgottenFunc); 
    return f.calculate(params); 
} 
... 
... 
System.out.println(calculate("p(a,h) = a*h/2", 2, 3)); 

結果:

3.0 

請按照mXparser tutorial

問候