[debutant] java:NullPointerException

java:NullPointerException [debutant] - Java - Programmation

Marsh Posté le 05-11-2007 à 17:48:04    

Bonjour,
j'ai une NullPointerException que j'arrive pas à résoudre :??:  
Auriez-vous une explication?
--------------------------------------
classe Maclasse1
{....
 
//méthode
public test() {
for (int i = 0; i < mot.getClientsCount(); i++) {....}
}
"mot" est une instance d'une autre classe "MaClasse2"  qui contient la méthode "getClientsCount" (je veux qu'elle me retourne le nombre total de clients):
 public  int getClientsCount()
     {
      int TotalClients = 0;
      for (int[]dataLine : data )
      {
       if (dataLine[0] == Client) {
     for (int i=0; i < dataLine.length; i++)
         { TotalClients = dataLine[i];
         }
        }
         }
       
      return TotalClients;
     }
----------------------------
data est "data = new int [items.size()][5];" que je crée à partir d'une méthode ParseFile (BuffereReader...) dans "MaClasse2"
Dans la méthode du parse j'utilise cette boucle:
for (String item : items) {
     splitter = new StringTokenizer(item, " " );
      int Client = Integer.parseInt(splitter.nextToken());;
     int Article = Integer.parseInt(splitter.nextToken());
     int Prix = Integer.parseInt(splitter.nextToken());
}
 
--------------------------
j'espère que j'étais claire..
Merci.

Reply

Marsh Posté le 05-11-2007 à 17:48:04   

Reply

Marsh Posté le 06-11-2007 à 09:03:04    

Où as-tu l'exception ?
 
Et petite astuce, quand tu as ce type d'exception, regarde (montre nous) plutot le code qui fait l'initialisation des variables (c'est là qu'il y a probablement un truc qui manque)

Reply

Marsh Posté le 06-11-2007 à 10:53:56    

Concernant l'exception:
"Exception in thread "main" java.lang.NullPointerException"
ça concerne les lignes:
 
Code :
 
for (int i = 0; i < mot.getClientsCount(); i++)
 
.....dans la classe "MaClasse1"
 
et le main de cette classe:
 
Code :
 
public static void main(String[] args) throws Exception {
  new MaClasse1();
}

Reply

Marsh Posté le 06-11-2007 à 12:23:47    

ça doit être ta variable mot qui n'est pas initialisée.
 

Citation :

public test() {
for (int i = 0; i < mot.getClientsCount(); i++) {....}
}


 
donc, a priori, mot est un attibut de la classe MaClasse1 donc tu devrais avoir quelque part (surement dans le constructeur)
mot = new MaClasse2();

Reply

Marsh Posté le 06-11-2007 à 14:51:52    

dans MaClasse1, je fais un import de  "MaClasse2" et j'intègre ça comme attribut de la classe:
public MaClasse2 mot;
et dans le constructeur de cette classe, j'ai mais "mot = new MaClasse2();"
et dans le Main, j'ai encore instancié MaClasse2 et j'ai fait appel à méthode test, mais j'ai une NullPointerException toujours :(

Reply

Marsh Posté le 07-11-2007 à 17:53:21    

Essai :

Code :
  1. if(mot==null) {System.out.println("mot est null =(" );System.out.flush();}
  2. for (int i = 0; i < mot.getClientsCount(); i++) {....}

Reply

Marsh Posté le 14-11-2007 à 04:00:18    

Salut,
 
Publie la totalite de ton code, ca doit pas etre si long, on fera un copier-coller pour reproduire l'erreur et on te la corrigera, ca ira beaucoup plus vite comme ca.
Autrement faut vraiment essayer de deviner, ca va pas le faire...
 
@++

Reply

Marsh Posté le 29-03-2008 à 11:28:04    

bonjour tout le monde!Je suis actuellement en train de faire un projet java qui consiste à évaluer une expression en affichant toutes les étapes et en utilisant une pile.Le problème est que depuis plusieurs jour je ne trouve pas l'erreur lorsque j'exécute le programme il me renvoi : java.lang.NullException
 
at Pile.sommet(pile.java:16)
at debut2.evaluation(debut2.java:139)
at debut2.main(debut2.java:16)
 
 
je sollicite votre aide Merci.
 
voici ce fameux programme :  
 

Code :
  1. import java.util.*;
  2. import java.util.StringTokenizer;
  3.  
  4. public class debut2  {
  5.  
  6. public static void main (String args [])  {
  7.      String ok=new String("oui" );
  8.       do  {
  9.         TextWindow.printLine("Donner l'expression a evaluer : " ) ;
  10.         String expression=TextWindow.readString();
  11.         StringTokenizer e=new StringTokenizer(expression);
  12.         
  13.         evaluation(e);
  14.  
  15.         TextWindow.printLine("voulez vous recommencer?" );
  16.          ok=TextWindow.readString();
  17.       } while(ok.equals("oui" ));
  18.   }
  19.  
  20. public static void evaluation (StringTokenizer e) {
  21.  
  22. Pile p = new Pile();
  23. String op=new String("+" );
  24. int b;
  25. int c;
  26. int resa;
  27. String resb;
  28. String ope;
  29.  
  30.     while (e.hasMoreTokens()) {
  31.     String i = e.nextToken();
  32.         if (estunnombre(i)) {
  33.         p.empiler(i);
  34.         }
  35.         else if (estunoperateur(i)) {
  36.             if (estprioritaire(op,i)) {
  37.             p.empiler(e.nextToken());
  38.             w = p.sommet();
  39.                        b=Integer.parseInt(w);
  40.             p.depiler();
  41.             ope = p.sommet();
  42.             p.depiler();
  43.             z = p.sommet();
  44.             c=Integer.parseInt(z);
  45.             p.depiler();
  46.                        resa=calculer(b,ope,c);
  47.             resb=Integer.toString(resa);
  48.             p.empiler(resb);
  49.                      }       /* fin de si estprioritaire */
  50.             else {    
  51.                            if (!(resteexpression(p)))  {        
  52.                                   p.empiler(i);       }   /* fin !resteexpression */
  53.                 else {
  54.                                w = p.sommet();
  55.                                b=Integer.parseInt(w);
  56.                     p.depiler();
  57.                     ope = p.sommet();
  58.                     p.depiler();
  59.                     z = p.sommet();
  60.                     c=Integer.parseInt(z);
  61.                                p.depiler();
  62.                                resa=calculer(b,ope,c);
  63.                     resb=Integer.toString(resa);
  64.                     p.empiler(resb);
  65.                         } /* fin de else */
  66.                              op=i;
  67.                              }  /* fin de else */
  68.           }   /* fin de else if */
  69.     }  /* fin de while */
  70.  
  71.  if (resteexpression(p))  {
  72.                             w = p.sommet();
  73.                                b=Integer.parseInt(w);
  74.                     p.depiler();
  75.                     ope = p.sommet();
  76.                     p.depiler();
  77.                     z = p.sommet();
  78.                     c=Integer.parseInt(z);
  79.                                p.depiler();
  80.                                resa=calculer(b,ope,c);
  81.                     resb=Integer.toString(resa);
  82.                     p.empiler(resb);
  83.        }  /* fin de if */
  84. }  /* fin de evaluation */
  85.  
  86.  public static boolean estunnombre(String valeur) {
  87.  for (int i = 0; i < valeur.length(); i++) {
  88.  char c = valeur.charAt(i);
  89.  if(c<'0' || c>'9') return false;
  90.  }
  91.  return true;
  92. }
  93.  
  94.  
  95. public static boolean estunoperateur(String x)   {
  96.     if (x.equals("+" ) || x.equals("-" ) || x.equals("*" )|| x.equals("/" )) {
  97.         return true; }
  98.     else { return false; }
  99. }
  100.  
  101. public static int calculer(int x, String a,int y) {
  102.   if ( a.equals("+" )) {
  103.   return x+y ; }
  104.  
  105.   else if ( a.equals("*" )) {
  106.   return x*y ; }
  107.  
  108.   else if ( a.equals("-" )) {
  109.   return x-y ; }
  110.  
  111.   else if ( a.equals("/" )) {
  112.   return x/y ; }
  113.    
  114.   else return -1 ;
  115.                  
  116.  }
  117.  
  118.  
  119. public static boolean estprioritaire(String premier , String deuxieme)  {
  120.   if ( (deuxieme.equals("x" ))||(deuxieme.equals("/" ))) {
  121.      return true;  }
  122.   else { return false ; }
  123.       }
  124.  
  125.  
  126. public static boolean resteexpression(Pile q)  {
  127.   String a=q.sommet();
  128.   q.depiler();
  129.  
  130. if (q.pileVide())  {
  131.   q.empiler(a);
  132. return false;   }
  133.   else {
  134. q.empiler(a);
  135. return true;  }
  136.  }
  137. }
  138.  
  139. public class Maillon {
  140.     String info;
  141.     Maillon suivant;
  142.  
  143.     public Maillon (Maillon s, String x) {
  144.     info=x;
  145.     suivant=s;
  146. }
  147.  
  148. @Override
  149.    public String toString() {
  150.        return info;
  151.    }
  152. }    
  153.  
  154. public class Pile {
  155.     Maillon sommet;
  156.     public Pile() {
  157.         sommet= null;
  158.     }
  159.     public Pile empiler (String e){
  160.         sommet=new Maillon (sommet,e);
  161.         return this;
  162.     }
  163.     public Pile depiler() {
  164.         sommet=sommet.suivant;
  165.         return this;
  166.     }
  167.     public String sommet () {
  168.         return this.sommet.info;
  169.     }
  170.     public void affichePile() {
  171.         TextWindow.printLine(sommet.toString());
  172.     }
  173.  
  174.        public boolean pileVide()  {
  175.                return sommet==null;    }
  176.  
  177. }


Message édité par Elmoricq le 29-03-2008 à 16:21:35
Reply

Marsh Posté le 29-03-2008 à 16:19:21    

Je me suis permis d'ajouter les balises de presentation de code a ton post, et supprime les nombreuses lignes vides superflues, parce que bon, tel quel, c'etait illisible.
 
edit : pour ton erreur, tu definis dans la classe Pile une variable "sommet". Dans le constructeur de la classe Pile, tu mets sommet a null !
Alors forcement, quand tu appelles la methode "sommet()" de la classe Pile, et que celle-ci tente de retourner this.sommet.info, tu te manges un NullPointerException.


Message édité par Elmoricq le 29-03-2008 à 16:25:10
Reply

Sujets relatifs:

Leave a Replay

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