Bloqué!!

tomi45 Messages postés 13 Date d'inscription lundi 4 janvier 2010 Statut Membre Dernière intervention 4 avril 2008 - 27 mars 2008 à 22:39
extraman1 Messages postés 103 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 26 décembre 2009 - 4 avril 2008 à 21:41
bonjour , je suis actuellement en 1ere année de licence et j'ai un
projet sur lequel je suis bloqué par l'affichage suivant :Exception in
thread main java.lang.NullPointerException

at debut.estprioritaire(debut.java:247)

at debut.evaluation(debut.java:59)

at debut.main(debut.java:16)

voici mon programme:

import java.util.*;
import java.util.StringTokenizer;

public class debut  {

 public static void main (String args [])  {
     String ok=new String("oui");
      do  {
        
         TextWindow.printLine("Donner l'expression a evaluer : ") ;
        String expression=TextWindow.readString();
        StringTokenizer e=new StringTokenizer(expression);
       
        evaluation(e);
           

        TextWindow.printLine("voulez vous recommencer?");
          ok=TextWindow.readString();
      } while(ok.equals("oui"));
  
   }

public static void evaluation (StringTokenizer e) {

Pile p = new Pile();
String op = null;
String w;
String z;
int b;
int c;
int resa;
String resb;
String ope;

    while (e.hasMoreTokens()) {

    String i = e.nextToken();

        if (estunnombre(i)) {

        p.empiler(i);
       
        p.affichePile();

        }

           
        else if (estunoperateur(i)) {

            if (!(estprioritaire(op,i))) {

            while (p!=null) {

             z = p.sommet();
             b=Integer.parseInt(z);

            p.depiler();

            ope = p.sommet();

            p.depiler();

             w = p.sommet();
             c=Integer.parseInt(w);   

            p.depiler();
            resa=calculer(b,ope,c);
            resb=Integer.toString(resa);   

            p.empiler(resb);
            p.affichePile();
            
            }

            p.empiler(i);
           
            op =i ;
             p.affichePile();
           
            }

            else if(estprioritaire(op,i)) {
           
            p.empiler(i);

            p.empiler(e.nextToken());

             w = p.sommet();
                         b=Integer.parseInt(w);

            p.depiler();

           

            ope = p.sommet();

            p.depiler();
                       
             z = p.sommet();
             c=Integer.parseInt(z);

            p.depiler();
                        resa=calculer(b,ope,c);
            resb=Integer.toString(resa);
            p.empiler(resb);

            p.affichePile();
           

            while (p!=null) {
       
             z = p.sommet();
             b=Integer.parseInt(z);

            p.depiler();

            ope = p.sommet();

            p.depiler();
                         w = p.sommet();
                         c=Integer.parseInt(w);

            p.depiler();
                       
                        resa=calculer(b,ope,c);
                        resb=Integer.toString(resa);

            p.empiler(resb);

            p.affichePile();
           
                 }
           
            }

        }

    }
   }

public static boolean estsuperieur(String premier , String deuxieme)  {

   if ( (deuxieme.equals("x"))||(deuxieme.equals("/"))) {

      return true;  }

   else if ((deuxieme.equals("+"))||(deuxieme.equals("-"))) {

         if ((premier.equals("*"))||(premier.equals("/")))  {
         return false; }

         else {
         return true;  }
 
         }

   else { return false ; }
  

}

  public static boolean estunnombre(String valeur) {

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

  char c = valeur.charAt(i);
  if(c<'0' || c>'9') return false;
  }
  return true;

}

 

public static boolean estunoperateur(String x)   {

    if (x.equals("+") || x.equals("-") || x.equals("*")|| x.equals("/")) {

        return true; }

    else { return false; }

}

public static int calculer(int x, String a,int y) {
   if ( a.equals("+")) {
   return x+y ; }

   else if ( a.equals("*")) {
   return x*y ; }

   else if ( a.equals("-")) {
   return x-y ; }
 
   else if ( a.equals("/")) {
   return x/y ; }
   
   else return -1 ;
                 
  }

 public static boolean estprioritaire(String premier , String deuxieme)  {

   if ( (deuxieme.equals("x"))||(deuxieme.equals("/"))) {

      return true;  }

   else if ((deuxieme.equals("+"))||(deuxieme.equals("-"))) {

         if ((premier.equals("*"))||(premier.equals("/")))  {
         return false; }

         else {
         return true;  }
 
         }

   else { return false ; }
  
       }

}

29 réponses

sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
31 mars 2008 à 15:41
oups

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
tomi45 Messages postés 13 Date d'inscription lundi 4 janvier 2010 Statut Membre Dernière intervention 4 avril 2008
31 mars 2008 à 22:20
Bonjour , me revoila avec une erreur soit dans ma classe pile soit dans la classe maillon car il y a une NullPointerException  :

voici :

public class Pile {
    Maillon sommet;
    public Pile() {
        sommet= null;
    }
    public Pile empiler (String e){
        sommet=new Maillon (sommet,e);
        return this;
    }
    public Pile depiler() {
        sommet=sommet.suivant;
        return this;
    }
    public String sommet () {
        return this.sommet.info;
    }
    public void affichePile() {
        TextWindow.printLine(sommet.toString());
    }

        public boolean pileVide()  {
                return sommet==null;    }

}

public class Maillon {

    String info;

    Maillon suivant;

    public Maillon (Maillon s, String x) {

    info=x;

    suivant=s;

}

@Override
    public String toString() {
       if (this!=null) {
     return info + "  " + suivant.toString();   }

        else return "  " ;
   

    }

}   

Merci  
0
tomi45 Messages postés 13 Date d'inscription lundi 4 janvier 2010 Statut Membre Dernière intervention 4 avril 2008
31 mars 2008 à 22:24
Ah désolé j'ai oublié de préciser que c'est lors de l'affichage d'une pile que cela ne marche pas.
exemple :

public class test   {

public static void main(String args[] ) {

  Pile p =new Pile();
p.empiler("2");p.empiler("5");
p.empiler("10");
p.affichePile();

}

}
0
tomi45 Messages postés 13 Date d'inscription lundi 4 janvier 2010 Statut Membre Dernière intervention 4 avril 2008
2 avril 2008 à 23:52
bonjour! 
j'ai réussi a créer le projet voulu mais il me reste encore a faire l'évaluation quand il y a des parenthèses mais je ne sais vraiment pas ce qu'il faut faire.Je compte vraiment sur vous avec une extrême impatience!!!!!   voici tout mon programme :

import java.util.*;
import java.util.StringTokenizer;

public class debut1  {

 public static void main (String args [])  {
     String ok=new String("oui");
      do  {  
        
         TextWindow.printLine("Donner l'expression a evaluer : ") ;
        TextWindow.printNewLine();
        String expression=TextWindow.readString();
        TextWindow.printNewLine();
        StringTokenizer e=new StringTokenizer(expression);
       
        evaluation(e);
           

        TextWindow.printNewLine();
        TextWindow.printLine("voulez vous recommencer oui/non ?");
          ok=TextWindow.readString();
        TextWindow.printNewLine();
      } while(ok.equals("oui")); 
  
   }

public static void evaluation (StringTokenizer e) {

Pile p = new Pile();
String op=new String("+");
String w;
String z;
int b;
int c;
int resa;
String resb;
String ope;
int som=0;
int d=1;
    while (e.hasMoreTokens()) {
   
    String i = e.nextToken();
   

        if (estunnombre(i)) { 

        p.empiler(i);
        som=som+1;
        TextWindow.print("(" + som + ")                     ");
        p.affichePile();

            
        }

           
        else if (estunoperateur(i)) {

            if (estprioritaire(i)==3) {
           
           
           
            p.empiler(i);
            som=som+1;
            TextWindow.print("(" + som + ")                     ");
            p.affichePile();
            TextWindow.printNewLine();
            p.empiler(e.nextToken());
            som=som+1;
            TextWindow.print("(" + som + ")                     ");
                        p.affichePile();
            TextWindow.printNewLine();

            w = p.sommet();
                        b=Integer.parseInt(w);
            p.depiler();
            ope = p.sommet();
            p.depiler();
            z = p.sommet();
            c=Integer.parseInt(z);
            p.depiler();
                        resa=calculer(c,ope,b);
            resb=Integer.toString(resa);
            som=som+1;
            TextWindow.print("(" + som + ")                     ");
            p.empiler(resb);
                        p.affichePile();
                    }       /* fin de si estprioritaire */ 
           
           

            else  if (estprioritaire(i)==2) {   

                            if (!(resteexpression(p)))  {       
                                   p.empiler(i);
                   som=som+1;
                       TextWindow.print("(" + som + ")                     ");
                   p.affichePile();

                   }   /* fin !resteexpression */

                               
                else {
                                  
           
                                w = p.sommet();
                                b=Integer.parseInt(w);
                    p.depiler();
                    ope = p.sommet();
                    p.depiler();

                    if (estprioritaire(ope)<2) {
       
                    p.empiler(ope);
                    p.empiler(w);
                    p.empiler(i);
                    som=som+1;
                            TextWindow.print("(" + som + ")                    ");
                    p.affichePile();     }

                    else  {

                                     z = p.sommet();
                                     c=Integer.parseInt(z);
                                                 p.depiler();
                                                 resa=calculer(c,ope,b);
                                      resb=Integer.toString(resa);
                                  p.empiler(resb);
                            som=som+1;
                            TextWindow.print("(" + som + ")                     ");
                            p.affichePile();
                             TextWindow.printNewLine();
                            p.empiler(i);
                            som=som+1;
                            TextWindow.print("(" + som + ")                     ");
                            p.affichePile();
                                }
               
                                   
                   
                 

               
                    }    /* fin de else */   
                                  

                              op=i;

                            
                              }  /* fin de else if  */

                else if (estprioritaire(i)==1) {

                if (resteexpression(p))  {
                while(resteexpression(p)) {
           
                                         w = p.sommet();
                                   b=Integer.parseInt(w);
                    p.depiler();
                    ope = p.sommet();
                    p.depiler();
                    z = p.sommet();
                    c=Integer.parseInt(z);
                    p.depiler();
                                resa=calculer(c,ope,b);
                    resb=Integer.toString(resa);
                    p.empiler(resb);
                    som=som+1;
                            TextWindow.print("(" + som + ")                     ");
                    p.affichePile();
                   
                     TextWindow.printNewLine();
                   
                     }
                   
                    }
           
                p.empiler(i);
                som=som+1;
               
                TextWindow.print("(" + som + ")                    ");
                p.affichePile(); 

                              }  /* fin de if estprioritaire */

               }   /* fin de estunopérateur */

        TextWindow.printNewLine();
       

     }  /* fin de while */
    

 
  while (resteexpression(p)) {
                TextWindow.printNewLine();
                            w = p.sommet();
                                b=Integer.parseInt(w);
                    p.depiler();
                    ope = p.sommet();
                    p.depiler();
                    z = p.sommet();
                    c=Integer.parseInt(z);
                                p.depiler();
                                resa=calculer(c,ope,b);
                    resb=Integer.toString(resa);
                    p.empiler(resb);
                som=som+1;
                TextWindow.print("(" + som + ")                     ");
                p.affichePile();
                     
                   
   
        }  

  

}  /* fin de evaluation */

  public static boolean estunnombre(String valeur) {

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

  char c = valeur.charAt(i);
  if(c<'0' || c>'9') return false;
  }
  return true;

}

 

public static boolean estunoperateur(String x)   {

    if (x.equals("+") || x.equals("-") || x.equals("*")|| x.equals("/")|| x.equals("^")) {

        return true; }

    else {
       return false; }

}

public static int calculer(int x, String a,int y) {
   if ( a.equals("+")) {
   return x+y ; }

   else if ( a.equals("*")) {
   return x*y ; }

   else if ( a.equals("-")) {
   return x-y ; }
 
   else if ( a.equals("/")) {
   return x/y ; }
  
   else if ( a.equals("^")) {
   return (int) Math.pow(x,y) ;  }
   
   else return -1 ;
                 
  }

 public static int estprioritaire(String deuxieme)  {

   if ( (deuxieme.equals("*"))||(deuxieme.equals("/"))) {

      return 2;  }

   else  if ( (deuxieme.equals("+"))||(deuxieme.equals("-"))) {
  
       return 1; }

   else  if ( (deuxieme.equals("^"))) {
  
       return 3; }

   else return -1 ;

   }

public static boolean resteexpression(Pile q)  {

   String a=q.sommet();
   q.depiler();
 
 if (q.pileVide())  {

   q.empiler(a);

return false;   }

   else {
q.empiler(a);

return true;  }

  }

}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tomi45 Messages postés 13 Date d'inscription lundi 4 janvier 2010 Statut Membre Dernière intervention 4 avril 2008
3 avril 2008 à 14:27
est ce que quelqu'un a trouvé?! Car je suis vraiment perdu pour les parenthèses!!
0
tomi45 Messages postés 13 Date d'inscription lundi 4 janvier 2010 Statut Membre Dernière intervention 4 avril 2008
3 avril 2008 à 20:11
Alors j'essaye de trouver une solution qui pourrait eventuellement marcher mais me voici avec une exception : java.util.NoSuchElementException

import java.util.*;
import java.util.StringTokenizer;

public class debut2  {

 public static void main (String args [])  {
     String ok=new String("oui");
      do  {  
        
         TextWindow.printLine("Donner l'expression a evaluer : ") ;
        TextWindow.printNewLine();
        String expression=TextWindow.readString();
        TextWindow.printNewLine();
        StringTokenizer e=new StringTokenizer(expression);
       
        evaluation(e);
           

        TextWindow.printNewLine();
        TextWindow.printLine("voulez vous recommencer oui/non ?");
          ok=TextWindow.readString();
        TextWindow.printNewLine();
      } while(ok.equals("oui")); 
  
   }

public static void evaluation (StringTokenizer e) {

Pile p = new Pile();
String op=new String("+");
String w;
String z;
int b;
int c;
int resa;
String resb;
String ope;
int som=0;
int d=1;
String s="  ";
StringTokenizer f;

    while (e.hasMoreTokens()) {
   
    String i = e.nextToken();
   

        if (estunnombre(i)) { 

        p.empiler(i);
        som=som+1;
        TextWindow.print("(" + som + ")                     ");
        p.affichePile();

            
        }

           
        else if (estunoperateur(i)) {

            if (estprioritaire(i)==3) {
           
           
           
            p.empiler(i);
            som=som+1;
            TextWindow.print("(" + som + ")                     ");
            p.affichePile();
            TextWindow.printNewLine();
            p.empiler(e.nextToken());
            som=som+1;
            TextWindow.print("(" + som + ")                     ");
                        p.affichePile();
            TextWindow.printNewLine();

            w = p.sommet();
                        b=Integer.parseInt(w);
            p.depiler();
            ope = p.sommet();
            p.depiler();
            z = p.sommet();
            c=Integer.parseInt(z);
            p.depiler();
                        resa=calculer(c,ope,b);
            resb=Integer.toString(resa);
            som=som+1;
            TextWindow.print("(" + som + ")                     ");
            p.empiler(resb);
                        p.affichePile();
                    }       /* fin de si estprioritaire */ 
           
           

            else  if (estprioritaire(i)==2) {   

                            if (!(resteexpression(p)))  {       
                                   p.empiler(i);
                   som=som+1;
                       TextWindow.print("(" + som + ")                     ");
                   p.affichePile();

                   }   /* fin !resteexpression */

                               
                else {
                                  
           
                                w = p.sommet();
                                b=Integer.parseInt(w);
                    p.depiler();
                    ope = p.sommet();
                    p.depiler();

                    if (estprioritaire(ope)<2) {
       
                    p.empiler(ope);
                    p.empiler(w);
                    p.empiler(i);
                    som=som+1;
                            TextWindow.print("(" + som + ")                    ");
                    p.affichePile();     }

                    else  {

                                     z = p.sommet();
                                     c=Integer.parseInt(z);
                                                 p.depiler();
                                                 resa=calculer(c,ope,b);
                                      resb=Integer.toString(resa);
                                  p.empiler(resb);
                            som=som+1;
                            TextWindow.print("(" + som + ")                     ");
                            p.affichePile();
                             TextWindow.printNewLine();
                            p.empiler(i);
                            som=som+1;
                            TextWindow.print("(" + som + ")                     ");
                            p.affichePile();
                                }
               
                                   
                   
                 

               
                    }    /* fin de else */   
                                  

                              op=i;

                            
                              }  /* fin de else if  */

                else if (estprioritaire(i)==1) {

                if (resteexpression(p))  {
                while(resteexpression(p)) {
           
                                         w = p.sommet();
                                   b=Integer.parseInt(w);
                    p.depiler();
                    ope = p.sommet();
                    p.depiler();
                    z = p.sommet();
                    c=Integer.parseInt(z);
                    p.depiler();
                                resa=calculer(c,ope,b);
                    resb=Integer.toString(resa);
                    p.empiler(resb);
                    som=som+1;
                            TextWindow.print("(" + som + ")                     ");
                    p.affichePile();
                   
                     TextWindow.printNewLine();
                   
                     }
                   
                    }
           
                p.empiler(i);
                som=som+1;
               
                TextWindow.print("(" + som + ")                    ");
                p.affichePile(); 

                              }  /* fin de if estprioritaire */

               }   /* fin de estunopérateur */

       

        else if (i.equals("(")) {
        i=e.nextToken();
        while(!i.equals(")"))  {
                 s=s.concat(e.nextToken());   }
        f=new StringTokenizer(s);
        evaluation(f);
               }
           

     }  /* fin de while */
    

 
  while (resteexpression(p)) {
                TextWindow.printNewLine();
                            w = p.sommet();
                                b=Integer.parseInt(w);
                    p.depiler();
                    ope = p.sommet();
                    p.depiler();
                    z = p.sommet();
                    c=Integer.parseInt(z);
                                p.depiler();
                                resa=calculer(c,ope,b);
                    resb=Integer.toString(resa);
                    p.empiler(resb);
                som=som+1;
                TextWindow.print("(" + som + ")                     ");
                p.affichePile();
                     
                   
   
        }  

  

}  /* fin de evaluation */

  public static boolean estunnombre(String valeur) {

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

  char c = valeur.charAt(i);
  if(c<'0' || c>'9') return false;
  }
  return true;

}

 

public static boolean estunoperateur(String x)   {

    if (x.equals("+") || x.equals("-") || x.equals("*")|| x.equals("/")|| x.equals("^")) {

        return true; }

    else {
       return false; }

}

public static int calculer(int x, String a,int y) {
   if ( a.equals("+")) {
   return x+y ; }

   else if ( a.equals("*")) {
   return x*y ; }

   else if ( a.equals("-")) {
   return x-y ; }
 
   else if ( a.equals("/")) {
   return x/y ; }
  
   else if ( a.equals("^")) {
   return (int) Math.pow(x,y) ;  }
   
   else return -1 ;
                 
  }

 public static int estprioritaire(String deuxieme)  {

   if ( (deuxieme.equals("*"))||(deuxieme.equals("/"))) {

      return 2;  }

   else  if ( (deuxieme.equals("+"))||(deuxieme.equals("-"))) {
  
       return 1; }

   else  if ( (deuxieme.equals("^"))) {
  
       return 3; }

   else return -1 ;

   }

public static boolean resteexpression(Pile q)  {

   String a=q.sommet();
   q.depiler();
 
 if (q.pileVide())  {

   q.empiler(a);

return false;   }

   else {
q.empiler(a);

return true;  }

  }

}

svp aidez oi!!
0
extraman1 Messages postés 103 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 26 décembre 2009 2
3 avril 2008 à 22:18
Salut,

J'y ai mis le temps mais voilà je pense que ton problème est résolu

*********************************************************
public class Pile {
    Maillon sommet;
    public Pile() {
        sommet= null;
    }
    public Pile empiler (String e){
        sommet=new Maillon (sommet,e);
        return this;
    }
    public Pile depiler() {
        sommet=sommet.suivant;
        return this;
    }
    public String sommet () {
        return this.sommet.info;
    }
    public void affichePile() {
        TextWindow.printLine(sommet.toString());
    }

        public boolean pileVide()  {
                return sommet==null;    }

}
******************************************************

public class Maillon {

    String info;

    Maillon suivant;

    public Maillon (Maillon s, String x) {

    info=x;

    suivant=s;

}

@Override
    public String toString() {
       if (suivant!=null) { //J'ai changé ici this par suivant
     return info + "  " + suivant.toString();   }

        else return info ; // Et ici c'est info que l'on doit envoyer
  

    }

}
*****************************************************
Cette classe a beaucoup surtout j'ai enlevé toutes tes fonctions static car ça fesait pas trop POO

import java.util.*;
import java.util.StringTokenizer;

public class debut2  {
    private Pile p; //Le mieux c'est de mettre ta pile comme attribut de la classe

    public debut2(){// Constructeur de debut2 qui initialise p
        p =new Pile();
    }
   
    public static void main (String args []){
        String ok= new String("oui");
        debut2 d = new debut2(); //Création de debut2
       
        do{
            TextWindow.printLine("Donner l'expression a evaluer : ") ;
            TextWindow.printNewLine();
            String expression=TextWindow.readString();
            TextWindow.printNewLine();
            StringTokenizer e=new StringTokenizer(expression);
           
            d.evaluation(e); //appel de evaluation
           
            TextWindow.printNewLine();
            TextWindow.printLine("voulez vous recommencer oui/non ?");
            ok =TextWindow.readString();
            TextWindow.printNewLine();
        } while(ok.equals("oui"));
    }

    public /*static*/ void evaluation (StringTokenizer e) { // Toutes les méthodes avec static je les ai mise sans static
        //p new Pile();>Suppression de cette ligne
        String op=new String("+");
        String w;
        String z;
        int b;
        int c;
        int resa;
        String resb;
        String ope;
        int som=0;
        int d=1;
        String s="  ";
        StringTokenizer f;
        String i;

        while (e.hasMoreTokens()) {
  
            i = e.nextToken();

            if (estunnombre(i)) {

                p.empiler(i);
                som=som+1;
                TextWindow.print("(" + som + ")                     ");
                p.affichePile();

           
            } else if (estunoperateur(i)) {

                if (estprioritaire(i)==3) {
          
          
          
                    p.empiler(i);
                    som=som+1;
                    TextWindow.print("(" + som + ")                     ");
                    p.affichePile();
                    TextWindow.printNewLine();
                    p.empiler(e.nextToken());
                    som=som+1;
                    TextWindow.print("(" + som + ")                     ");
                    p.affichePile();
                    TextWindow.printNewLine();

                    w = p.sommet();
                    b=Integer.parseInt(w);
                    p.depiler();
                    ope = p.sommet();
                    p.depiler();
                    z = p.sommet();
                    c=Integer.parseInt(z);
                    p.depiler();
                    resa=calculer(c,ope,b);
                    resb=Integer.toString(resa);
                    som=som+1;
                    TextWindow.print("(" + som + ")                     ");
                    p.empiler(resb);
                    p.affichePile();
                }       /* fin de si estprioritaire */
                else  if (estprioritaire(i)==2) {  

                    if (!(resteexpression(p)))  {      
                        p.empiler(i);
                        som=som+1;
                        TextWindow.print("(" + som + ")                     ");
                        p.affichePile();

                    }   /* fin !resteexpression */

                              
                    else {
                        w = p.sommet();
                        b=Integer.parseInt(w);
                        p.depiler();
                        ope = p.sommet();
                        p.depiler();

                        if (estprioritaire(ope)<2) {
      
                            p.empiler(ope);
                            p.empiler(w);
                            p.empiler(i);
                            som=som+1;
                            TextWindow.print("(" + som + ")                    ");
                            p.affichePile();
                        }

                        else  {

                            z = p.sommet();
                            c=Integer.parseInt(z);
                            p.depiler();
                            resa=calculer(c,ope,b);
                            resb=Integer.toString(resa);
                            p.empiler(resb);
                            som=som+1;
                            TextWindow.print("(" + som + ")                     ");
                            p.affichePile();
                            TextWindow.printNewLine();
                            p.empiler(i);
                            som=som+1;
                            TextWindow.print("(" + som + ")                     ");
                            p.affichePile();
                        }
              
                    }    /* fin de else */  
                                 

                    op=i;

                           
                }  /* fin de else if  */

                else if (estprioritaire(i)==1) {

                    if (resteexpression(p))  {
                        while(resteexpression(p)) {
          
                            w = p.sommet();
                            b=Integer.parseInt(w);
                            p.depiler();
                            ope = p.sommet();
                            p.depiler();
                            z = p.sommet();
                            c=Integer.parseInt(z);
                            p.depiler();
                            resa=calculer(c,ope,b);
                            resb=Integer.toString(resa);
                            p.empiler(resb);
                            som=som+1;
                            TextWindow.print("(" + som + ")                     ");
                            p.affichePile();
                  
                            TextWindow.printNewLine();
                  
                        }
                  
                    }
          
                    p.empiler(i);
                    som=som+1;
              
                    TextWindow.print("(" + som + ")                    ");
                    p.affichePile();

                }  /* fin de if estprioritaire */

            }   /* fin de estunopérateur */

      

            else if (i.equals("(")) {
                       /* i=e.nextToken();
                        while(!i.equals(")"))  {
                                     s=s.concat(e.nextToken());
                        }
                        f=new StringTokenizer(s);
                        evaluation(f);

                         Beaucoup d'erreur ici
                        

                        */

                        i=e.nextToken();
                        s = ""; // il faut initialiser s à "zéro"
                        while(!i.equals(")"))  {
                            s = i + " " + s; /*le gros bug de ta concaténation était le fait que tu avais oublié l'espace dans le StringTokenizer(s) plus bas ne pouvais pas marcher*/
                            i= e.nextToken(); /* ça tu l'avais pas mis donc le "!i.equals(")")" ne marchera jamais */
                        }

                        f =new StringTokenizer(s);
                        evaluation(f);
            }
          

        }  /* fin de while */
   

 
        while (resteexpression(p)) {
            TextWindow.printNewLine();
            w = p.sommet();
            b=Integer.parseInt(w);
            p.depiler();
            ope = p.sommet();
            p.depiler();
            z = p.sommet();
            c=Integer.parseInt(z);
            p.depiler();
            resa=calculer(c,ope,b);
            resb=Integer.toString(resa);
            p.empiler(resb);
            som=som+1;
            TextWindow.print("(" + som + ")                     ");
            p.affichePile();
                    
                  
  
        } 

 

    }  /* fin de evaluation */

    public /*static*/ boolean estunnombre(String valeur) {

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

            char c = valeur.charAt(i);
            if(c<'0' || c>'9') return false;
        }
        return true;

    }

 

    public /*static*/ boolean estunoperateur(String x)   {

        if (x.equals("+") || x.equals("-") || x.equals("*")|| x.equals("/")|| x.equals("^")) {

            return true;
        } else {
            return false;
        }

    }

    public /*static*/ int calculer(int x, String a,int y) {
        if ( a.equals("+")) {
            return x+y ;
        } else if ( a.equals("*")) {
            return x*y ;
        } else if ( a.equals("-")) {
            return x-y ;
        } else if ( a.equals("/")) {
            return x/y ;
        } else if ( a.equals("^")) {
            return (int) Math.pow(x,y) ;
        } else return -1 ;
            
    }

    public /*static*/ int estprioritaire(String deuxieme)  {

        if ( (deuxieme.equals("*"))||(deuxieme.equals("/"))) {

            return 2;
        } else  if ( (deuxieme.equals("+"))||(deuxieme.equals("-"))) {
 
            return 1;
        } else  if ( (deuxieme.equals("^"))) {
 
            return 3;
        } else return -1 ;

    }

    public /*static*/ boolean resteexpression(Pile q)  {

        String a=q.sommet();
        q.depiler();
 
        if (q.pileVide())  {

            q.empiler(a);

            return false;
        } else {
            q.empiler(a);

            return true;
        }

    }

}
*************************************************

Voilà pour le reste tout est bon a++

extraman1
0
tomi45 Messages postés 13 Date d'inscription lundi 4 janvier 2010 Statut Membre Dernière intervention 4 avril 2008
4 avril 2008 à 17:39
Bonjour,merci beaucoup pour le temps que vous avez passé a me donner un coup de main!

Alors j'ai vu une petite erreur ici : c'est s= s + " " + i;
Aussi le programme ne marche pas tout a fait bien , mais il me donne quelques idées pour continuer.

Si vous arrivé à faire marcher le programme complètement , je suis tout ouïe.
Merci 
0
extraman1 Messages postés 103 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 26 décembre 2009 2
4 avril 2008 à 21:41
Salut,

J'ai essayé de le faire autrement avec des méthodes par récurrence et ça marche nickel :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class debut2 {
    private ArrayList<String> entreParenthese;
   
   
    public debut2() {
       
    }

    public static void main (String args []) throws IOException{
        String ok=new String("oui");

        debut2 d = new debut2();   
       
        do{
            System.out.println("Donner l'expression a evaluer : \n") ;
           
            BufferedReader entree = new BufferedReader(new InputStreamReader(System.in));

            String expression = entree.readLine();
           
            System.out.println();
           
            StringTokenizer e=new StringTokenizer(expression, "()");
           
            System.out.println(d.evaluation(expression,"()"));
           
            System.out.println();
           
            System.out.println("voulez vous recommencer oui/non ?");
           
            ok=entree.readLine();
           
            System.out.println();
        } while(ok.equals("oui"));
    }
   
    public String evaluation(String expression, String separation){
        StringTokenizer e=new StringTokenizer(expression, separation);        String retour "",a "", b = "";
       
        if(separation.equals("()")){
            retour = evaluation(e.nextToken(),"+");
            while(e.hasMoreTokens()){
                retour = retour + evaluation(e.nextToken(),"+");
            }
           
            retour = evaluation(retour,"+");
        } else if(expression.charAt(0)<'0' || expression.charAt(0)>'9' || expression.charAt(expression.length()-1)<'0' || expression.charAt(expression.length()-1)>'9'){
            return expression;
        } else if(separation.equals("+")){
            retour = String.valueOf(Double.parseDouble(evaluation(e.nextToken(),"-")));//200
            while(e.hasMoreTokens()){
                retour = String.valueOf(Double.parseDouble(retour) + Double.parseDouble(evaluation(e.nextToken(),"-")));
            }
        } else if(separation.equals("-")){
            retour = String.valueOf(Double.parseDouble(evaluation(e.nextToken(),"*")));
            while(e.hasMoreTokens()){
                retour = String.valueOf(Double.parseDouble(retour) - Double.parseDouble(evaluation(e.nextToken(),"*")));
            }
        } else if(separation.equals("*")){
            retour = String.valueOf(Double.parseDouble(evaluation(e.nextToken(),"/")));
            while(e.hasMoreTokens()){
                retour = String.valueOf(Double.parseDouble(retour) * Double.parseDouble(evaluation(e.nextToken(),"/")));
            }
        } else if(separation.equals("/")){
            retour = String.valueOf(Double.parseDouble(evaluation(e.nextToken(),"^")));
            while(e.hasMoreTokens()){
                retour = String.valueOf(Double.parseDouble(retour) / Double.parseDouble(evaluation(e.nextToken(),"^")));
            }
        } else if(separation.equals("^")){
            retour = e.nextToken();
            while(e.hasMoreTokens()){
                retour = String.valueOf(Math.pow(Double.parseDouble(retour) , Double.parseDouble(evaluation(e.nextToken(),"^"))));
            }
        }
       
        return retour;

    }
}

extraman1
0
Rejoignez-nous