0

私はJavaで以下のように与えられた形式の数式を持っています(もちろん、これほど単純ではありません):

String equation = "x^2 + 3*y + 1";

同じサイズ n を持つ x および y 配列から z 値を生成し、z = 方程式(x,y) のようにサイズ n も生成したいと考えています。たとえば、z = { x[0]^2 + 3 * y[0] + 1 , ..... , x[n-1]^2 + 3 * y[n-1] + 1 }.

x や y などの任意の数の変数のすべての整数セットに関してすべての方程式を評価するのに役立つ、外部ライブラリを使用しない Java での最良のアプローチは何ですか?

4

2 に答える 2

1

すべてをゼロからやりたい場合は、方程式パーサーを考え出す必要があります。

そこから Enum を使用します:

    enum Operation{ADD, SUBTRACT;

        public int evaluate(int operand1, int operand2) throws IllegalOperationException {
            switch(this) {
            case ADD: return operand1 + operand2;
            case SUBTRACT: return operand1 - operand2;
            default:
                break;
            }
            throw new IllegalOperationException();
        }

        public static Operation getOperator(String operator) throws IllegalOperationException{
            for(Operation o: Operation.values()){
                if(o.toString().equals(operator)){
                    return o;
                }
            }
            throw new IllegalOperationException();
        }
    }; 

したがって、スタック/キューを使用して方程式を解析し、各 operator(op) に対して基本的に次のことを行います。

Operation.getOperator(op).evaluate(r1, r2);

また

constructed stringjdk1.6 以降を使用している場合は、x と y を x[i] と y[i] に置き換えて、組み込みの JavaScript エンジンに渡します。

ScriptEngineManager sm = new ScriptEngineManager();
ScriptEngine en = sm.getEngineByName("JavaScript");
String expression = //your expression with values;
System.out.println(engine.eval(expression));
于 2013-07-30T07:44:52.233 に答える