2009-06-07 9 views
1

Je suis en quelque sorte nouveau à Java, donc ma question peut sembler triviale, mais je ne trouve pas de réponse à n'importe quel endroit dans mes livres. Je veux initier un dialogue avec un utilisateur dans lequel il entrerait une expression arithmétique (par exemple (2 * x + y)) Et ensuite imprimer le résultat pour une telle expression (pour des valeurs données de x et y)Conversion d'une chaîne insérée en une expression compilable

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

Je ne convertir la chaîne insérée par l'utilisateur de sorte qu'il servira d'expression arithmétique pour x et y et donc définir la valeur pour la sortie

TIA JMT

Répondre

3

Vous devez écrire un analyseur d'expression pour accomplir thi s type de comportement. Il existe un certain nombre de façons d'accomplir ceci:

  1. Écrivez votre propre analyseur d'expression en utilisant par ex. ANTLR.
  2. Incluez un langage de script (Jython, Beanshell, JavaScript ...) et utilisez-le pour analyser et évaluer les expressions. L'API Java Scripting peut vous montrer comment faire cela.
4

Il est pas si difficile de les analyser vous-même, mais si vous avez besoin d'un résultat rapide et probablement précis, vous pouvez utiliser l'une des bibliothèques existantes pour analyser les expressions arithmétiques, comme JEP ou peut-être que Simple Parser for Arithmetic Expressions.

Voir le Jep Console pour un échantillon. On dirait que Jep est payant. Ce n'est peut-être pas un problème, sinon, comme je l'ai écrit, vous devriez pouvoir trouver un certain nombre de bibliothèques équivalentes.

1

Il n'existe aucune fonction native en Java pour évaluer les chaînes en tant qu'expressions. Vous devez donc faire le travail vous-même. Si vous voulez juste une solution rapide et sale, Javassist inclut un compilateur d'extraits vous permettant de définir une nouvelle classe avec votre expression, et de l'invoquer pour obtenir votre résultat, après quoi vous pouvez le jeter (c'est-à-dire le lancer dans un classloader séparé). Il faudra un travail bien :)

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

0

Comment convertir une chaîne en Arithmétique Expression

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

pour cela nous avons besoin d'un séparé fichier jar nommé: fichier bsh.jar

nécessité de définir classpath fichier jar ci-dessus

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

Questions connexes