-1

データセットに対して数学演算を行っています。プロジェクトの要件に応じて、数式/ロジックはいつでも変更できます。したがって、これらのフォーマルをJavaコードから除外することを考えています。構成ファイルに含まれている可能性があります。以下は設定ファイルの例です。

formula.propertiesファイル-

formula_a=(a+b)/(7*c+b^2)

formula_b=(a^(1/2)-formula_a*13)

formula_c=spilt_time(formula_b,a,b)

Calculator.java(ダミーの Java ファイル。デモ目的のみのため、正しくない可能性があります)

public class Calculator
{
    private final static String FORMULA_A = "formula_a";
    private final static String FORMULA_B = "formula_b";
    private final static String FORMULA_C = "formula_c";

    public static void main(String[] args)
    {
        long a = 1738342634L;
        long b = 273562347895L;
        long c = 89346755249L;
        long ansFromFormulaA = applyFormulaFromConfig(FORMULA_A, new long[] { a, b, c });
        long ansFromFormulaB = applyFormulaFromConfig(FORMULA_B, new long[] { a, b, c });
        long ansFromFormulaC = applyFormulaFromConfig(FORMULA_C, new long[] { a, b });
    }

    // spilt_time is used in formula_c
    public static long[] spilt_time(long[] params)
    {
        final long[] split = new long[2];
        // Some logic here which is applied on params array and answer is pushed
        // into split array
        return split;
    }

    private static long applyFormulaFromConfig(String formulaName, long[] params)
    {
        long ans = 0L;
        // Read formula from property file here and apply the params over it and
        // return the answer
        return ans;
    }
}

これに対する解決策を設計するのを手伝ってください。

4

1 に答える 1

1

ここに1つあります:

アプリケーション外の別の js ファイルで JavaScript の関数を定義します。次のようになります。

function myFunction1(x, y, z) {
  return x * y + z;
}

これで、これらのスクリプトを Java ScriptEngine 経由で評価し、これらの関数を名前で呼び出してパラメーターを渡すことができます。

ご覧ください: http://www.wondee.info/2013/10/30/the-scriptengine-bindings/

編集:

プロパティ ファイル:

function1=x + y * z
function2=x * x

関数を数式変数に読み込みます...そして...

関数を文字列に入れて、次のように関数本体に入れることができます。

String formula = readFromProperties("function1");

String myFunctionScript = String.format("function myFunction(x, y, z) { return %s ;}", formula);
于 2013-11-11T08:24:26.070 に答える