2009-06-07 8 views
1

Ich bin irgendwie neu in Java, also kann meine Frage trivial erscheinen, aber ich kann nirgendwo in meinen Büchern eine Antwort darauf finden.Konvertieren der eingefügten Zeichenfolge in einen kompilierbaren Ausdruck

Ich möchte einen Dialog mit einem Benutzer initiieren, in dem er einen arithmetischen Ausdruck eingeben würde (zB (2 * x + y)) Und dann das Ergebnis für einen solchen Ausdruck ausgeben (für gegebene Werte von x und 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); 

I versagen die Zeichenfolge durch den Benutzer eingefügt zu konvertieren, so dass es als ein arithmetischer Ausdruck für x dienen würde und Y und damit der Wert für die Ausgabe

TIA JMT

Antwort

3

Sie haben zu definieren, schreibe einen Ausdrucksparser, um dies zu erreichen s Art von Verhalten. Es gibt eine Reihe von Möglichkeiten, dies zu erreichen:

  1. Schreiben Sie Ihren eigenen Ausdruck Parser mit z. ANTLR.
  2. Fügen Sie eine Skriptsprache hinzu (Jython, Beanshell, JavaScript ...) und verwenden Sie diese, um die Ausdrücke zu parsen und auszuwerten. Die Java Scripting API kann Ihnen zeigen, wie dies zu tun ist.
4

Es ist nicht so schwer, sie selbst zu analysieren, aber wenn Sie schnell und wahrscheinlich genaues Ergebnis benötigen, können Sie eine der vorhandenen Bibliotheken verwenden, um arithmetische Ausdrücke zu analysieren, wie JEP oder vielleicht, dass Simple Parser for Arithmetic Expressions.

Siehe die Jep Console für eine Probe. Es sieht aus wie Jep ist Payware. Es könnte kein Problem sein, sonst sollten Sie, wie ich geschrieben habe, eine Anzahl gleichwertiger Bibliotheken finden können.

1

In Java gibt es keine systemeigene Funktion zum Auswerten von Zeichenfolgen als Ausdrücke. Sie müssen daher die Arbeit selbst erledigen.

Wenn Sie nur eine schnelle und schmutzige Lösung wollen, enthält Javassist einen Snippet Compiler, mit dem Sie eine neue Klasse mit Ihrem Ausdruck definieren und sie aufrufen können, um das Ergebnis zu verwerfen, dh es in einem separater Klassenlader). Es wird noch einige Arbeit allerdings erfordern :)

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

0

Wie man einen String in Arithmetic Expression einen separaten wir brauchen

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); 
    } 
} 

für diese konvertieren JAR-Datei mit dem Namen: bsh.jar-Datei

Notwendigkeit Classpath für oben JAR-Datei

Quelle zu setzen: http://ohmjavaclasses.blogspot.com/2011/11/how-to-convert-string-into-arithmetic.html

Verwandte Themen