[Java] java.lang.NullPointerException

Résolu
Bonjour,
je voudrais savoir quel est le probleme d'un java.lang.NullPointerException ? si vous voulez je peut ecrire le code..



--
_______________________________________________________________________
A tous c'est Le_mazo

5 réponses

  1. Modérateur
    Si tu écris a.b il faut que a!=null.
    En particulier tout objet doit être initialisé avant d'être utilisé.
    1. salut merci de repondre regarde
      c'est le jeu snake et j'ai du mal
      L'erreur est dans deplacerS (il y a un commentaire):

      import iut.algo.*;

      public class Metier
      {
      int nbLig;
      int nbCol;
      char[][] grille;
      Element serpent;
      int p;
      Element[] anneaux;
      int cptAnneaux;
      int nbElt;

      public Metier(){
      grille = new char[][] { { 'X','X','X','X',' ',' ',' ','X','X','X','X' },
      { 'X',' ',' ',' ',' ',' ',' ',' ',' ',' ','X' },
      { 'X',' ',' ',' ',' ',' ',' ',' ',' ',' ','X' },
      { 'X','X','X',' ',' ','*',' ',' ','X','X','X' },
      { ' ','*',' ',' ',' ',' ',' ',' ',' ',' ',' ' },
      { ' ',' ',' ',' ',' ','S','*',' ',' ',' ',' ' },
      { ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ' },
      { 'X','X','X',' ',' ',' ',' ',' ','X','X','X' },
      { 'X',' ',' ',' ',' ',' ',' ',' ',' ',' ','X' },
      { 'X',' ',' ','*',' ',' ','*',' ',' ',' ','X' },
      { 'X','X','X','X',' ',' ',' ','X','X','X','X' }};

      nbLig = grille.length;
      nbCol = grille[0].length;
      serpent = new Element (5 ,5);
      anneaux = new Element[100];
      initSerpent();
      }

      public void initSerpent(){
      anneaux[0] = new Element (5 ,5);
      anneaux[1] = new Element (6, 5);
      anneaux[2] = new Element (7, 5);
      }

      public boolean deplacer( char c )
      {
      Element s;

      if ( c == 'N' || c == 'n' )
      {
      if (serpent.getLig() == 0)
      {
      if ( mur ( (serpent.getLig() + nbLig - 1), serpent.getCol()))
      {
      return false;
      }
      else
      {
      s = serpent;
      serpent = new Element( (s.getLig() + nbLig - 1),s.getCol());
      deplacerS ( serpent, c );

      return true;
      }
      }
      else
      {
      if ( mur ( (serpent.getLig() - 1), serpent.getCol()))
      {
      return false;
      }
      else
      {
      s = serpent;
      serpent = new Element( (s.getLig() - 1),s.getCol());
      deplacerS ( serpent, c );
      return true;
      }
      }
      }
      else
      {
      if ( c == 'S' || c == 's' )
      {
      if (serpent.getLig() == nbLig - 1 )
      {
      if ( mur ( (serpent.getLig() - nbLig + 1), serpent.getCol()))
      {
      return false;
      }
      else
      {
      s = serpent;
      serpent = new Element( (s.getLig() - nbLig + 1),s.getCol());
      deplacerS ( serpent, c );
      return true;
      }
      }
      else
      {
      if ( mur ( (serpent.getLig() + 1), serpent.getCol()))
      {
      return false;
      }
      else
      {
      s = serpent;
      serpent = new Element( (s.getLig() + 1),s.getCol());
      deplacerS ( serpent, c );
      return true;
      }
      }
      }
      else
      {
      if ( c == 'O' || c == 'o' )
      {
      if (serpent.getCol() == 0)
      {
      if ( mur ( serpent.getLig(), (serpent.getCol() + nbCol - 1)))
      {
      return false;
      }
      else
      {
      s = serpent;
      serpent = new Element( s.getLig(), (s.getCol()+ nbCol - 1));
      deplacerS ( serpent, c );
      return true;
      }
      }
      else
      {
      if ( mur ( serpent.getLig(), (serpent.getCol() - 1)))
      {
      return false;
      }
      else
      {
      s = serpent;
      serpent = new Element(s.getLig(), (s.getCol() - 1));
      deplacerS ( serpent, c );
      return true;
      }
      }
      }
      else
      {
      if ( c == 'E' || c == 'e' )
      {
      if (serpent.getCol() == nbCol - 1 )
      {
      if ( mur ( serpent.getLig() , (serpent.getCol()- nbCol + 1)))
      {
      return false;
      }
      else
      {
      s = serpent;
      serpent = new Element( s.getLig() ,(s.getCol() - nbCol + 1));
      deplacerS ( serpent, c );
      return true;
      }
      }
      else
      {
      if ( mur ( serpent.getLig(), (serpent.getCol() + 1)))
      {
      return false;
      }
      else
      {
      s = serpent;
      serpent = new Element( s.getLig(), (s.getCol() + 1));
      deplacerS ( serpent, c );
      return true;
      }
      }
      }
      }
      }
      }
      return false;
      }

      public boolean mur( int lig, int col){
      if ( grille[lig][col] == 'X' )
      {
      return true;
      }
      else
      {
      return false;
      }
      }

      public String toString(){
      String a = "";
      for (int lig=0; lig<grille.length ; lig++ )
      {
      for (int col=0; col<grille[0].length ; col++ )
      {
      a += "" + grille[lig][col] + "";
      }
      a += "\n";
      }
      return a;
      }

      public int compteurPastille (){
      p = 0;
      for(int cpt = 0; cpt < nbLig; cpt++){
      for(int cpt2 = 0; cpt2 < nbCol; cpt2++){
      if ( grille[cpt][cpt2] == '*') { p++; }
      }
      }
      return p;
      }

      public int compteurPastilleInit () {
      p = 0;
      for(int cpt = 0; cpt < nbLig; cpt++){
      for(int cpt2 = 0; cpt2 < nbCol; cpt2++){
      if ( grille[cpt][cpt2] == '*') { p++; }
      }
      }
      nbElt = p;
      return p;
      }

      public void deplacerS( Element serpent, char c ) {

      Element tmp1;
      Element tmp2;
      char car =c;
      tmp1 = serpent ;
      tmp2 = anneaux[nbElt - 1];
      for (int cpt = nbElt - 1; cpt > 0; cpt--){
      anneaux[cpt] = anneaux[cpt-1];
      grille[anneaux[cpt].getLig()][anneaux[cpt].getCol()] = 'o'; // L'erreur est ici
      }
      anneaux[0] = tmp1;
      grille[tmp1.getLig()][tmp1.getCol()] = 'S';
      grille[tmp2.getLig()][tmp2.getCol()] = ' ';
      agrandirQueue ( car );
      }

      public boolean mangerPastille( char c){
      switch ( c ){
      case 'n' : if(grille[(serpent.getLig() - 1)][serpent.getCol()]== '*') { return true ; }
      else { return false; }
      case 's' : if(grille[(serpent.getLig() + 1)][serpent.getCol()]== '*') { return true ; }
      else { return false; }
      case 'o' : if(grille[(serpent.getLig())][serpent.getCol() - 1]== '*') { return true ; }
      else { return false; }
      case 'e' : if(grille[(serpent.getLig())][serpent.getCol() + 1]== '*') { return true ; }
      else { return false; }
      }
      return false;
      }

      /*public void agrandirQueue( char c){
      if ( mangerPastille( c )){
      anneaux[nbElt] = new Element( anneaux[nbElt - 1].getLig(), anneaux[nbElt - 1].getCol() );
      nbElt++;
      }
      }*/

      public boolean partieFini ( ) {

      boolean mordu = false;
      for (int cpt = nbElt; cpt > 0; cpt--){
      mordu = (anneaux[0] == anneaux[cpt]);
      if( mordu ){
      System.out.println ( "HAHAHA, vous avez PERDU !!!"); return true;
      }
      if( p == 0 ) { System.out.println ( "Bravo, vous avez GAGNE !!!"); return true; }
      else { return false; }
      }
      return false;
      }
      }
      _______________________________________________________________________
      A tous c'est Le_mazo
      1. Modérateur
        Je ne peux pas tester car il me manque la classe Element, la méthode agrandirQueue et la méthode main.

        Cependant si l'erreur est sur cette ligne ci :
        grille[anneaux[cpt].getLig()][anneaux[cpt].getCol()] = 'o';
        Cela signifie que anneaux[cpt]==null.

        Modifie cette ligne avec le code suivant, et dis moi ce que le message d'erreur affiche.
        try{
          grille[anneaux[cpt].getLig()][anneaux[cpt].getCol()] = 'o'; 
        }catch(NullPointerException e){
            e.printStackTrace();
            System.err.println("nbElt = "+nbElt+"\tanneaux.length = "+anneaux.length);
            System.err.println("cpt = "+cpt+"\tanneaux[cpt] = "+anneaux[cpt]);
        }
        1. voici le message d'erreur:

          java.lang.NullPointerException
          ____at Metier.deplacerS(Metier.java:236)
          ____at Metier.deplacer(Metier.java:71)
          ____at Controleur.main(Controleur.java:61)
          nbElt = 5____________anneau.length = 100
          cpt = 4 _____________anneaux[cpt] = null
          java.lang.NullPointerException
          ____at Metier.deplacerS(Metier.java:245)
          ____at Metier.deplacer(Metier.java:71)
          ____at Controleur.main(Controleur.java:61)
          ________________________________________________________________
          A tous c'est Le_mazo
          1. KX je tiens a te remercier car l'erreur etait en fait nbElt qui etait trop grand car je le l'avait pas initialiser au bon endrois

            merci beaucoup pour ton aide qui m'a ete precieuse.
            ________________________________________________________________
            A tous c'est Le_mazo