1

我对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 的算术表达式,从而定义输出的值

TIA JMT

4

5 回答 5

4

自己解析它们并不难,但是如果您需要快速且可能准确的结果,您可以使用现有的库之一来解析算术表达式,例如JEP或者可能是Simple Parser for Arithmetic Expressions

有关示例,请参阅Jep 控制台。看起来 Jep 是付费软件。这可能不是问题,否则正如我所写的,您应该能够找到许多等效的库。

于 2009-06-07T21:07:35.160 回答
3

你必须编写一个表达式解析器来完成这种行为。有多种方法可以做到这一点:

  1. 使用例如ANTLR 编写您自己的表达式解析器。
  2. 包括一种脚本语言(Jython、Beanshell、JavaScript...)并使用它来解析和评估表达式。Java Scripting API 可以向您展示如何执行此操作。
于 2009-06-07T20:56:28.940 回答
1

你也可以看看 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的第三个示例

JScheme 主页http://jscheme.sourceforge.net/jscheme/main.html

于 2010-07-16T00:30:13.100 回答
1

Java 中没有用于将字符串评估为表达式的本机工具。因此,您必须自己完成这项工作。

如果您只想要一个快速而肮脏的解决方案,Javassist 包含一个片段编译器,允许您使用您的表达式定义一个新类,并调用它以获得您的结果,之后您可以丢弃它(即在单独的类加载器中运行它)。不过,这将需要一些工作:)

http://www.jboss.org/javassist/

于 2009-06-07T21:52:30.297 回答
0

如何将字符串转换为算术表达式

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

于 2011-12-10T11:43:00.827 回答