Calculatrice d'expressions arithmétiques simple
Bekatni
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
sakoba2010 Messages postés 157 Date d'inscription Statut Membre Dernière intervention -
sakoba2010 Messages postés 157 Date d'inscription Statut Membre Dernière intervention -
salut tout le monde j'ai un petit problème !!!
Je suis entrain de faire une calculatrice d'une expression arithmétique simple en JAVA.
j'ai réussi à faire l'analyse de l'expression mais il me reste à faire les calculs.
J'ai pensé à parcourir l'expression(en String) et lorsque je trouve un opérateur '*' ou '/' ou '+' ou '-' je fais l'opération et je remplace les entiers et l'opérateur que j'ai utilisé par le résultat dans mon expression.
Problème n°1 :je dois recommencer tant qu'il y a encore des opérateurs dans mon expression. Le problème c'est que je n'arrive pas à récupérer la nouvelle expression et j'ai exactement le même problème si j'ai deux opérateurs identiques.
Je ne sait vraiment pas quoi faire et je suit réellement bloqué.
Pour que vous puissiez comprendre où j'en suis et mon déroulement, vous pouvez trouver ci-joint une partie de mon code. Bien évidement si quelqu'un à une bien meilleure idée concernant le code, soit en l'améliorant soit en le changeant, je suis bien évidement ouvert à d'autres proposition.
Dans l'espoir que quelqu'un puisse m'aider, je vous remercie d'avance de votre aide!!
[code=java]import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class calcul_expression {
public void calcul(int [] ENTIER, char [] operator,String expression){
//le tableau ENTIER contiet tous les entiers de notre expression
//le tableau operateur contient tous les operateur de notre expression
int j = 0;
int [] tmp = new int [10];
int [] tmp1 = new int [10];
int m = 0;
int n = 0 ;
int resultat = 0 ;
String res = null;
for(int i = 0;i<expression.length();i++){
if(expression.charAt(i)=='*'){
j = i ;//on cherche l'indice de l'operateur '*' dans un notre expression.
tmp[m] = j;
m++;
}
}
for(int i=0;i<operator.length;i++){
if(operator[i]=='*'){
j = i;
tmp1[n] = j;
n++;
}
resultat = ENTIER[j] * ENTIER[j+1];//je fais la multiplication
res = String.valueOf(resultat); //je fait la conversion en String
}expression = expression.substring(0,tmp[0]-1) + res;//je concatène les deux string en suppriment les elément que j'ai utiliser pour la multiplication
System.out.println("l'expression est " +expression);//on fait l'affichage
}
public static void main(String[] args) throws IOException{
String expression;
System.out.println("Entrez l'operation que vous voulez effectuer");
BufferedReader Buf = new BufferedReader(new InputStreamReader (System.in));
expression = Buf.readLine();
}
}
/code
Je suis entrain de faire une calculatrice d'une expression arithmétique simple en JAVA.
j'ai réussi à faire l'analyse de l'expression mais il me reste à faire les calculs.
J'ai pensé à parcourir l'expression(en String) et lorsque je trouve un opérateur '*' ou '/' ou '+' ou '-' je fais l'opération et je remplace les entiers et l'opérateur que j'ai utilisé par le résultat dans mon expression.
Problème n°1 :je dois recommencer tant qu'il y a encore des opérateurs dans mon expression. Le problème c'est que je n'arrive pas à récupérer la nouvelle expression et j'ai exactement le même problème si j'ai deux opérateurs identiques.
Je ne sait vraiment pas quoi faire et je suit réellement bloqué.
Pour que vous puissiez comprendre où j'en suis et mon déroulement, vous pouvez trouver ci-joint une partie de mon code. Bien évidement si quelqu'un à une bien meilleure idée concernant le code, soit en l'améliorant soit en le changeant, je suis bien évidement ouvert à d'autres proposition.
Dans l'espoir que quelqu'un puisse m'aider, je vous remercie d'avance de votre aide!!
[code=java]import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class calcul_expression {
public void calcul(int [] ENTIER, char [] operator,String expression){
//le tableau ENTIER contiet tous les entiers de notre expression
//le tableau operateur contient tous les operateur de notre expression
int j = 0;
int [] tmp = new int [10];
int [] tmp1 = new int [10];
int m = 0;
int n = 0 ;
int resultat = 0 ;
String res = null;
for(int i = 0;i<expression.length();i++){
if(expression.charAt(i)=='*'){
j = i ;//on cherche l'indice de l'operateur '*' dans un notre expression.
tmp[m] = j;
m++;
}
}
for(int i=0;i<operator.length;i++){
if(operator[i]=='*'){
j = i;
tmp1[n] = j;
n++;
}
resultat = ENTIER[j] * ENTIER[j+1];//je fais la multiplication
res = String.valueOf(resultat); //je fait la conversion en String
}expression = expression.substring(0,tmp[0]-1) + res;//je concatène les deux string en suppriment les elément que j'ai utiliser pour la multiplication
System.out.println("l'expression est " +expression);//on fait l'affichage
}
public static void main(String[] args) throws IOException{
String expression;
System.out.println("Entrez l'operation que vous voulez effectuer");
BufferedReader Buf = new BufferedReader(new InputStreamReader (System.in));
expression = Buf.readLine();
}
}
/code
A voir également:
- Calculatrice d'expressions arithmétiques simple
- Iphone 14 simple - Guide
- Simple pdf - Télécharger - PDF
- Calculatrice gratuit - Télécharger - Calcul & Conversion
- Simple ocr - Télécharger - Bureautique
- Installation calculatrice - Télécharger - Calcul & Conversion
3 réponses
Pourquoi tu n'utilise pas la classe ScriptEngine C'est très simple pour exécuter ces genre d'opération.
exemple:
voir ça:
http://sakoba.byethost13.com/...
exemple:
String script = "print(5*10)"; engine.eval(script);
voir ça:
http://sakoba.byethost13.com/...
Regarde le post 'calcul de la valeur en java' j'y avais expliqué une méthode.
Voici un début de code pour un Arbre d'évaluation, j'ai repris le même exemple.
J'ai pris des entiers puisque c'est ce que tu veux faire apparemment...
J'ai mis les constructeurs et la fonction toString pour voir comment ça se manipule.
Le principe est toujours le même, il y a une imbrication récursive de sous-arbres dans des arbre. Quand on manipule l'arbre il faut vérifier si on a des sous-arbres (différents de null) et les traiter avant de continuer.
L'évaluation de la valeur de l'arbre est très rapide à faire, le plus dur est de passer d'une chaîne de caractères à un arbre valide, mais tu as déjà commencé à traiter cette étape.
J'ai pris des entiers puisque c'est ce que tu veux faire apparemment...
J'ai mis les constructeurs et la fonction toString pour voir comment ça se manipule.
Le principe est toujours le même, il y a une imbrication récursive de sous-arbres dans des arbre. Quand on manipule l'arbre il faut vérifier si on a des sous-arbres (différents de null) et les traiter avant de continuer.
L'évaluation de la valeur de l'arbre est très rapide à faire, le plus dur est de passer d'une chaîne de caractères à un arbre valide, mais tu as déjà commencé à traiter cette étape.
public class Arbre { private String op; private Arbre ag; private Arbre ad; public Arbre(Character operateur, Arbre gauche, Arbre droit) { op=operateur.toString(); ag=gauche; ad=droit; } public Arbre(Integer operande) { op=operande.toString(); ag=null; ad=null; } public String toString() { String s=op; if (ag!=null) s+=" "+ag.toString(); if (ad!=null) s+=" "+ad.toString(); return s; } public static void main(String args[]) { Arbre a = new Arbre('*', new Arbre('+', new Arbre(1), new Arbre(2)), new Arbre('-', new Arbre(3), new Arbre(4))); System.out.println(a); // * + 1 2 - 3 4 } }
Pour calculer sa valeur, tu différencies plusieurs cas :
Si ton arbre est une feuille (null à gauche et à droite), op est une opérande, donc c'est un entier que tu peux évaluer avec parseInt.
Sinon (il y a des sous-arbres), op est un opérateur, donc c'est un caractère et tu peux faire un switch.
Par exemple, si l'opérateur est '+' le résultat sera l'addition de l'évaluation de l'arbre de gauche et de l'évaluation de 'arbre droit.
Pour une expression quelconque ça devrait marcher à condition de switcher tous les opérateurs que tu peux rencontrer.
Si ton arbre est une feuille (null à gauche et à droite), op est une opérande, donc c'est un entier que tu peux évaluer avec parseInt.
Sinon (il y a des sous-arbres), op est un opérateur, donc c'est un caractère et tu peux faire un switch.
Par exemple, si l'opérateur est '+' le résultat sera l'addition de l'évaluation de l'arbre de gauche et de l'évaluation de 'arbre droit.
Pour une expression quelconque ça devrait marcher à condition de switcher tous les opérateurs que tu peux rencontrer.
C'est plus facile avec ta proposition, on laisse le choix à l'utilisateur.
merci