对于长(也有点奇怪的:))标题感到抱歉,我无法想到一个更好的标题,但是这里有。
我使用JFrame
制作了一个Java计算器,JButtons
就像真正的计算器那样TextArea
。单击按钮时,计算将显示在TextArea
中。等于'等于'按下按钮,整个计算取自36+45/22
并计算。我遇到的问题是如何实际计算答案。这可能听起来有点奇怪,但是说我得到的计算是{{1}}。如何将数字写入变量然后告诉计算机对变量执行哪些操作,以及按什么顺序执行。这可以用无数个变量来完成吗?有没有办法做到这一点?谢谢你的帮助。
答案 0 :(得分:3)
您可以使用ScriptEngine
:
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
System.out.println("result = " + engine.eval("36+45/22"));
另一个选项是Jep。
答案 1 :(得分:1)
试试这个,我使用类似的实现。工作得很好。 :-D
答案 2 :(得分:0)
如果您想自己评估表达式而不依赖于外部API(如ScriptEngine),则必须首先解析表达式。这种解析为您提供了表达式的内存表示,然后您可以对其进行评估。
处理算术表达式的常用方法是递归下降解析器。这种解析器具有很好的功能,它可以在解析方法中就地解析表达式。可以在http://www.savarese.org/articles/1998-2006/2001-05-Recursive_Descent_Parsing/找到不依赖于计算机科学的形式语言理论的递归下降解析器的示例