0

我在Java中有一个如下给出形式的数学公式(当然不像这个简单):

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

我想从具有相同大小 n 的 x 和 y 数组生成 z 值,使得 z = equation(x,y) 也具有大小 n。例如 z = { x[0]^2 + 3 * y[0] + 1 , ..... , x[n-1]^2 + 3 * y[n-1] + 1 }。

在没有外部库的情况下,Java 中最好的方法是什么,可以帮助我评估关于任意数量变量(例如 x 和 y)的每个整数集的每个方程?

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

因此,使用堆栈/队列解析您的方程,然后为每个运算符(操作)基本上执行以下操作:

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

或者

将 x 和 y 替换为 x[i] 和 y[i] 并将其传递constructed string给内置的 javascript 引擎,以防您使用 jdk1.6 或更高版本。

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 回答
0
public int[] solveEquation(int[] x, int[] y){
    if (x == null || y == null || x.length != y.length){
        return null;
    }
    int[] z = new int[x.length];
    for (int i=0; i<x.length; i++){
        z[i] = x[i]^2 + 3*y[i] + 1;
    }
    return z;
}
于 2013-07-30T07:25:50.243 回答