java:如何实现数学解析

标签 java parsing math matrix

我正在尝试用java实现一个简单的数学解析器。这是针对我的小型学校项目,该项目使用矩阵,可以输入一些简单的方程,例如 A^-1(B+C),然后程序要求输入矩阵 A、B 和 C 并输出这些运算的结果。

到目前为止我得到的是一个名为MathParser的类,它创建Operation类的对象。 Operation 具有诸如 setOperation(plus、times、inverse、power 之一)和 addInput(Matrix|Operation|int) 等方法,最后是 executeOperation() 循环 addInput() 中的所有项目并执行 setOperation 中选定的操作。如果它发现输入中的某些项目是类操作的实例,它首先执行它 - 这是一种循环调用。这样做是为了管理运算顺序 - 乘法先于加法等。

但是,我觉得这个解决方案不是很好。您对如何实现这样的任务有什么想法吗?

最佳答案

好吧,也许这个解决方案并不完全是您需要/想要实现的,或者可能是一种矫枉过正,但我​​会使用一些脚本引擎(例如 Groovy)。在这种情况下,您的代码将如下所示:

GroovyShell shell = new GroovyShell();
shell.setVariable("a",10);
shell.setVariable("b",20);
int result = ((Number) shell.evaluate("(a+b)/2")).intValue();

此外,您还可以解析任何复杂的公式,甚至使用您的特定计算函数。您只需将其全部放入 shell 中,然后计算输入字符串即可。

添加: 默认情况下,运算符不处理矩阵,但使用 groovy 实现它并不难,因为它支持运算符重载(在此处了解更多信息: http://groovy.codehaus.org/Operator+Overloading )

这是一个矩阵示例:

class Matrix {
    private int[][] data;

    public Matrix(int[][] data) {
        this.data = data;
    }

    public int[][] getData() {
        return data;
    }

    //Method that overloads the groovy '+' operator
    public Matrix plus(Matrix b) {
        Matrix result = calculateMatrixSumSomehow(this,b);
        return result;
    }
}

现在您的通话将如下所示:

shell.setVariable("A",new Matrix(...));
shell.setVariable("B",new Matrix(...));
Matrix result = (Matrix)shell.evaluate("A+B"); //+ operator will use 'plus' function

关于java:如何实现数学解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4460631/

相关文章:

java - 如何使用 Java 处理 Selenium Webdriver 中的 HTTP Basic Auth header ?

php - 我收到解析器错误消息

c - O(1) 代码来计算一个范围内数字的倍数?

Java - JPanel 和 KeyListener 问题

java - 私有(private)成员不被继承。那么 getter 和 setter 如何访问子类中的私有(private)字段呢?

c - 在 C 中读取 .csv 文件

java - Json 解析为 HashMap<ArrayList<>> 在 Libgdx 中抛出 StackOverflowError?

javascript - 将 Number.MAX_SAFE_INTEGER 与 Math.random() 相乘时,我是否可能会丢失任何十进制数字(精度)?

c++ - 添加每个可能的 xor-sum 子数组的和的算法

java - java中如何组合多个正则表达式?