Calcul Java

Résolu
thapipo Messages postés 14 Statut Membre -  
Xmzd Messages postés 3 Statut Membre -
Bonjour,

Je voudrais savoir comment faire le calcul suivant :

ex :
int reponse;
char operateur = '*'
int a = 25
int b = 2

je voudrais que Java puisse faire le calcul de la multiplication (et autres operateur)

dans mon exemple ça serait :

reponse = a + operateur + b;

devrait donner 50 !
mais ca ne marche pas donc ! java prend la valeur du code UNICODE du caractère '*'

Merci !

5 réponses

  1. totodunet Messages postés 1513 Statut Membre 201
     
    dans ce cas fais plutôt ça :
    int reponse;
    int a =25;
    int b=2;
    reponse = a*b;
    return reponse;

    Qui ne tente rien n'a rien
    3
  2. thapipo Messages postés 14 Statut Membre 2
     
    ma méthode est celle-ci :

    public static int calculer ( char operation, int op1, int op2 ){

    int reponse = 0;

    reponse = (op1 + operation + op2);

    return reponse;

    }

    est-ce qu'il faudrait que j'utilise un String dans la méthode pour donner la valeur du char pour que je puisse faire l'opération demandée ?
    1
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Tu ne peux pas faire obtenir le résultat simplement, en construisant le String tu aurais juste ton expression bien formée ("25*2" avec ton exemple), ce qu'il faut après c'est évaluer cette expression et c'est là qu'intervient le moteur JavaScript... À moins que tu ne veuilles refaire ce qui existe déjà et gérer tous les cas possibles mais c'est plus compliqué à mettre en place.

      public static final ScriptEngine JavaScript = new ScriptEngineManager().getEngineByName("JavaScript");
      
      public static double eval(String expr)
      {
          try
          {
              Object obj = JavaScript.eval(expr);
              if (obj instanceof Double)
              	return (double) obj;
              else
              	return Double.NaN;
          }
          catch (ScriptException e)
          {
          	System.err.println(e);
          	return Double.NaN;
          }
      }
      
      public static int calculer(char operation, int op1, int op2)
      {
      	String expr = String.format("%d%c%d", op1,operation,op2);
      	
      	return (int) eval(expr);
      }
      	
      public static void main(String[] args) throws ScriptException
      {
      	System.out.println(calculer('*',25,2));
      }
      0
  3. thapipo Messages postés 14 Statut Membre 2
     
    humm Je t'avouerais que je suis débutant en Java, le hic c'est que je suis limité à utiliser les classes String & Character, mais MERCI beaucoup pour les réponses, j'essaierais de voir ce que je peux faire avec cela !
    1
  4. Xmzd Messages postés 3 Statut Membre 1
     
    le plus simple selon moi reste le if ou le switch ensuite:

    avec if:

    public static int calculer(char operation, int op1, int op2)
    {
    if(operation=='*')
    {
    return (op1*op2);
    }
    return (0); //peut-etre pas judicieux de mettre 0 ici mais c'est une autre question
    }

    avec switch:

    public static int calculer(char operation, int op1, int op2)
    {
    switch(operation)
    {
    case '+': return (op1+op2); break;
    case '-': return (op1-op2); break;
    case '*': return (op1*op2); break;
    case '/': return (op1/op2); break;
    default: return(0); //peut-etre pas judicieux de mettre 0 ici mais c'est une autre question
    }
    }

    Le switch te permettant de rajouterd'autres opérateurs, ce qui reviendrait à faire plusieurs if.
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. KX Messages postés 19031 Statut Modérateur 3 020
     
    Tu devrais construire ton expression sous forme de String puis utiliser un ScriptEngine pour l'évaluer, par exemple avec le moteur JavaScript :

    public static void main(String[] args) throws ScriptException
    {
    	char operateur = '*';
    	int a = 25;
    	int b = 2;
    	
    	ScriptEngine JavaScript = new ScriptEngineManager().getEngineByName("JavaScript");
    	double x = (double) JavaScript.eval(String.format("%d%c%d",a,operateur,b));
    	
    	System.out.println(x);
    }
    0