我对 Java 有点陌生,所以我的问题看起来微不足道,但是我在我的书中找不到答案。
我想与用户启动一个对话框,在其中输入一个算术表达式(例如(2*x+y)),然后打印出该表达式的结果(对于给定的 x 和 y 值)
String EXPRESION = null;
EXPRESION = JOptionPane.showInputDialog("Please enter expresion for dy/dx");
double x = 1.4;
double y = 5;
double output = HERE IS THE PROBLEM
JOptionPane.showMessageDialog("The value is" +output);
我无法转换用户插入的字符串,因此它将用作 x 和 y 的算术表达式,从而定义输出的值
自己解析它们并不难,但如果您需要快速且可能准确的结果,您可以使用现有的库之一来解析算术表达式,例如 JEP 或也许是 Simple Parser for Arithmetic Expressions。
请参阅 Jep Console 以获取示例。 看起来 Jep 是付费软件。这可能不是问题,否则正如我所写,您应该能够找到许多等效的库。
您必须编写一个表达式解析器来完成这种行为。有多种方法可以实现此目的:
Java 中没有用于将字符串计算为表达式的本机工具。 因此,您必须自己完成这项工作。
如果您只是想要一个快速而肮脏的解决方案,Javassist 包含一个片段编译器,允许您使用表达式定义一个新类,并调用它来获取结果,之后您可以丢弃它(即在单独的类加载器中运行它) 。 不过,这需要一些工作:)
你也可以看看JScheme。需要使用 jscheme jar 文件编译和运行。
import jscheme.JS;
String query = "(+ 10 20)";
System.out.println(query + " = " + JS.eval(query));
请参阅下面的第三个示例:http://jscheme.sourceforge.net/jscheme/doc/userman.html#si
如何将字符串转换为算术表达式
import bsh.*;
class Operation
{
public static void main(String[] args)throws Exception
{
Interpreter i=new Interpreter();
int r=(Integer)i.eval(args[0]);
System.out.println(r);
}
}
为此,我们需要一个单独的 jar 文件,名为:bsh.jar 文件
需要为上述jar文件设置类路径
来源: http://ohmjavaclasses.blogspot.com/2011/11/how-to-convert-string-into-arithmetic.html