2012-04-22 13 views
4

以下のような関数を作成する方法はありますか?未知の式のラッパー関数

私は三角形の面積を計算する必要があります。これを計算する正しい数式は記憶されておらず、インターネットやその他の情報源はありません。私が覚えていることは、そのような機能の議論はある側面であるということです。bと高さhです。だから私は、次のようになり、いくつかの関数を作成したい:

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

私は正規表現を使用してwithough、JavaからJavaScriptのeval関数に基づいて実装を考えました。私は文字列(forgottenFunc)を、必要なものを計算するために与えられたパラメータを使用するいくつかの実際の関数に変換することに固執しています。 Pythonのevalや他の機能の代替案。 ありがとう

+0

に従ってくださいトリアンの領域gle、use A = bh/2 – DankMemes

+1

あなたは答えを見つけようとは思わなかった。三角形の面積を計算するにはさまざまな方法がありますが、ウィキペディアはこれを行うさまざまな方法について[10個の個別セクション](http://en.wikipedia.org/wiki/Triangle#Computing_the_area_of_a_triangle)を提供しています。 – Darthfett

+3

私は "三角形の面積を計算する"は単なる例であると思います。ジョングレイが本当に求めているのは、Javaがクロージャを持っているかどうかです。 – emory

答えて

1

無料のJava数学解析ツールJepを試してください。

0

あなたのコメントに基づいて、私はあなたが閉鎖ではなくパーサーを望むことが分かります。

JavaScript eval関数に相当するものはありません。それは悪とみなされます。

zovegames suggestsのようなサードパーティパーサーを使用するか、javaccのようなものを使用して独自のパーサーを作成することができます。

0

一般的な解決方法:プログラムにMVELを埋め込み、数式を文字列として渡し、パラメータをバインドして評価することができます。リンクされたページから:

MVELは、Javaベースのアプリケーションのための強力な表現言語です。これは多彩な機能を提供し、最小限のプロパティのバインドと抽出、完全なスクリプトの作成まであらゆるものに適しています。

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)); 

結果:

1

mXparserは:-)例の下に従ってくださいあなたのニーズにフィットする

3.0 

計算するにはmXparser tutorial

敬具

関連する問題