transfomer String en "bout de code" (parse ???)

transfomer String en "bout de code" (parse ???) - Java - Programmation

Marsh Posté le 10-11-2007 à 23:24:48    

Bonjour, je souhaite réaliser une classe fonction dans laquelle je peux entrer une fonction via la ligne de commande, et ensuite l'évaluer en un point . Le code actuel :

Code :
  1. public class Fonction {
  2. public String fctn;
  3. public Fonction(){
  4.  fctn=es.LireCh("taper la fonction avec x comme variable par exemple 4*x+259" );
  5. }
  6. public double evaluer(double x){
  7.  return Double.parseDouble(fctn);
  8. }
  9. }


es est une classe me permettant de mettre la chaine tapée dans la ligne de commande, par exemple 4*x+259.
ensuite, dans la méthode évaluer, je voudrais donc avoir  return 4*x+259, ce qui serait cohérent puisque x est bien déclaré comme paramètre. Cependant, il me jette un number format exception .
 
Si vous avez des idéees, Merci

Reply

Marsh Posté le 10-11-2007 à 23:24:48   

Reply

Marsh Posté le 15-11-2007 à 10:17:36    

Reply

Marsh Posté le 30-11-2007 à 15:46:23    

Java est un langage compilé, pas interprété. Donc dans le principe, ça n'a pas vraiment de sens du générer du code Java exécutable à la volée.
En pratique, c'est faisable avec la classe com.sun.tools.javac.Main livrée en standard avec le JSDK. Mais c'est lourd, très lourd.
 
De deux choses l'une :
 - soit ce qui t'intéresse, c'est juste évaluer des expressions arithmétiques, et il vaut mieux utiliser une bibliothèque de manipulation formelle d'expressions mathématiques
 - soit tu veux vraiment pouvoir exécuter du code saisi à la volée qui interagit avec ton propre code (pour utiliser voire modifier tes variables Java), et là, tu peux utiliser la classe com.sun.tools.javac.Main pour compiler du code Java.
 
Si tu peux utiliser le JDK6, tu peux aussi utiliser les services du package javax.script, qui permet d'interpréter et exécuter du code JavaScript qui  interagit avec ton code Java (ce qui correspond plus ou moins, en termes de code, à ta demande initiale).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed