Calculatrice parenthésée?

james007bond1980 Messages postés 3 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 30 janvier 2005 - 26 déc. 2004 à 13:05
julienlll Messages postés 7 Date d'inscription lundi 27 décembre 2004 Statut Membre Dernière intervention 13 avril 2005 - 5 janv. 2005 à 10:28
Bonjour à tous et à toutes!
je suis un newbie en java . je souhaiterai créer une calculatrice simple capable de faire des opérations arithmétiques (*,+,-,/)
,de gérer les priorités d'opérations,de gérer les parenthèses...
Par exemples:

javac Calculatrice 3 + 8 x 2
resultat : 3+8x2 = 19

javac Calculatrice 16+5*8
resultat : 16+5x8 = 56

javac Calculatrice 6 x (2- 1) + 5 -( 7 x 2 - 10)
resultat : 6x(2-1)+ 5-(7x2-10) = 7

javac Calculatrice 6 - x - 30
resultat : cette expression n'est pas reconnue. Elle ne peux pas être évaluée

javac Calculatrice 42 + - 56
resultat : cette expression n'est pas reconnue. Elle ne peux pas être évaluée

Merci!!!!!!!! :-)

4 réponses

julienlll Messages postés 7 Date d'inscription lundi 27 décembre 2004 Statut Membre Dernière intervention 13 avril 2005
31 déc. 2004 à 12:32
salute,
je ne suis pas expert java, mais vu que je travaille un peu sur la meme chose, je vais te dire comment j'aurais fait (ca doit marcher, apres je ne sais pas si c'est le plus efficace ...) :
J'aurais commencé par spliter la chaine (

public String Equation_modif( String equation){

String[] equation_tab = equation.split("|");

//et apres traité caractere par caractere avac un boucle

for (int i = 1; i < equation_tab.length; i++) {
if (equation_tab[i].equals("+") ) {
equation_tab[i] = "+1*";}
if (equation_tab[i].equals("-") ) {
equation_tab[i] = "-1*";}
}
//puis reconcatener le tout
equation = null;
for ( int i = 0 ; i<equation_tab.length ; i++){
equation += equation_tab[i];
}
return equation;}

(à priori, pas d'erreur de compilation ...)
si ca marche, ou si tu trouve autre chose, ca pourrait m'interesser .....

@ plus
Julien
0
julienlll Messages postés 7 Date d'inscription lundi 27 décembre 2004 Statut Membre Dernière intervention 13 avril 2005
31 déc. 2004 à 14:08
en fait ca marche pas, mais je me demande si -*- est vraimement valide ..., ca doit pouvoir se faire, mais ca se traite au cas par cas (pour les trucs pas trop tordu, j'ai fais un code ... mais c'est un peu compliqué )
0
james007bond1980 Messages postés 3 Date d'inscription dimanche 26 décembre 2004 Statut Membre Dernière intervention 30 janvier 2005
1 janv. 2005 à 12:06
Merci de m'avoir répondu julienlll !
Bonne année 2005 ! mes meilleurs voeux!
peux tu me montrer ton code un peu compliqué?

merci d'avance pour ta reponse!
0
julienlll Messages postés 7 Date d'inscription lundi 27 décembre 2004 Statut Membre Dernière intervention 13 avril 2005
5 janv. 2005 à 10:28
ca y est, je me pose ...

le code traite (du moins je pense ...) les pb de +- de *-, *+ aprés
c'est difficile de mettre en place un code systematique qui regle TOUS
les problemes (meme ceux que l'utilisateur ne sait pas régler ...)



voilà mon code, si tu as des mofifs/commentaires, n'hésite pas



public class Sans_titre1 {



public Sans_titre1() {

}

public static void main(String[] args) {

Sans_titre1 sans_titre11 = new Sans_titre1();

String test = new String ("42+-56");

System.out.println("test = "+test);

System.out.println("resultat = "+ Equation_modif(test));

String testé = new String ("6-85*-30");

System.out.println("test = "+testé);

System.out.println("resultat = "+ Equation_modif(testé));



}





public static String Equation_modif( String equation){



String[] equation_tab = equation.split("|");



//et apres traité caractere par caractere avac un boucle



for (int i = 1; i < equation_tab.length; i++) {

if (equation_tab[i].equals("+")) {

if (equation_tab[i + 1].compareTo("+") != 0 &&

equation_tab[i + 1].compareTo("-") != 0) {

equation_tab[i] = "(+1)*";



}

else {

if (equation_tab[i + 1].compareTo("*") != 0 &&

equation_tab[i + 1].compareTo("/") != 0) {

equation_tab[i] = "+1*";

}

else {

equation_tab[i] = "+1";

}

}

}



if (equation_tab[i].equals("-")) {

if (equation_tab[i + 1].compareTo("+") != 0 &&

equation_tab[i + 1].compareTo("-") != 0 ) {

equation_tab[i] = "(-1)*";

}

else {

if (equation_tab[i+1].compareTo("*") !=0 &&

equation_tab[i+1].compareTo("/") !=0){

equation_tab[i] = "-1*";

}else{

equation_tab[i] = "-1";

}

}

}

if (equation_tab[i].equals("*")) {

if (equation_tab[i + 1].compareTo("+") != 0 &&

equation_tab[i + 1].compareTo("-") != 0 &&

equation_tab[i + 1].compareTo("*") != 0 &&

equation_tab[i + 1].compareTo("/") != 0) {

equation_tab[i] = "*1*";

}

else {

equation_tab[i] = "*1*";

}

}



if (equation_tab[i].equals("/")) {

if (equation_tab[i + 1].compareTo("+") != 0 &&

equation_tab[i + 1].compareTo("-") != 0 &&

equation_tab[i + 1].compareTo("*") != 0 &&

equation_tab[i + 1].compareTo("/") != 0) {

equation_tab[i] = "/1*";

}

else {

equation_tab[i] = "/1";

}

}









}

//puis reconcatener le tout

equation = "";

for ( int i = 0 ; i<equation_tab.length ; i++){

equation += equation_tab[i];

}

return equation;}





}
0
Rejoignez-nous