我有一个multidimension arrayList,我问用户一个公式,而不是我评估它。问题是我得到这样的用户输入:
((a1+a2)/12)*a3
问题是a1和a2和a3引用了列,我必须将它评估为某个值,我完全迷失了如何处理这个问题,任何建议或指导都会很棒。此计算值也必须在每次更新任何列时更新。事情是公式不是硬编码。
答案 0 :(得分:3)
答案 1 :(得分:3)
就个人而言,我会尽力避免所有解析内容,并寻找一个允许您使用自己的变量解析器的EL库。您需要做的就是将变量连接到您的支持模型。 (在您的情况下,分割单词/字母边界,并查找单元格内容。)
这也允许您通过简单地将它们暴露给EL引擎来包含任意函数。像OGNL,MVEL等等可能是一个很好的起点。似乎更容易。
答案 2 :(得分:1)
Heisenbug's suggestion的替代方法是尝试Dijkstra的shunting-yard algorithm。您可以使用堆栈和队列,而不是依赖树结构。优点是所涉及的这些数据结构并不十分复杂。缺点是可能很容易错过实现算法的任何错误,因为您需要彻底了解所涉及的操作,以了解您的实现是否正确。
答案 3 :(得分:0)
您需要将公式转换为Binary Expression Tree之类的内容。这不应该 很难。
然后,您将需要遍历此树以评估开始时的表达式值以及每次arrayList中的值更改时。首先集中精力构建树,并在评估时获得正确的值。不要忘记负数和变量!在此之后,观察arrayList的变化应该是微不足道的。