IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

NullPointerException sur un tableau


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Par défaut NullPointerException sur un tableau
    Bonjour. Je suis débutant en java et j'ai besoin de votre aide pour me dire où se trouve le problème.
    j'ai écris ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    package morpion;
     
     
    public class Morpion {
     
        private static final int VIDE=0;
        private static final int ROND=1;
        private static final  int CROIX=2;
        private int[][] grille;
     
        // Methode vider la grille
     
        public void RAZ()
        {
            for(int i=0;i<grille.length;++i)
            {
                for(int j=0;j<grille[i].length;j++)
                {
                    grille[i][j]=VIDE;
                }
            }
        }
        public Morpion()
        {
            RAZ();
        }
        // remplir la grille
        public void setCase(int i,int j,int val)
        {
            if(i<0 || i>= grille.length || j<0 || j>= grille[i].length || val != ROND || val!= CROIX )
            {
                System.out.println("Valeurs incorrectes");
            }
            else
            {
                grille[i][j]=val;
            }
     
        }
        // montrer case
        public int getVal(int i,int j)
        {
           if(i<0 || i>= grille.length || j<0 || j>= grille[i].length)
           {
              System.out.println("Valeurs incorrectes");
               return -1;
           }
            else
           {
               return grille[i][j];
           }
        }
        public static void main(String[] args) {
           Morpion jeu=new Morpion();
            System.out.println(jeu.grille[1][1]);
           jeu.setCase(1, 0, CROIX);
            System.out.println(jeu.getVal(1,0));
     
        }
     
    }
    je m'attends à avoir comme résultat:
    0
    2

    j'ai comme message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Exception in thread "main" java.lang.NullPointerException
    	at morpion.Morpion.RAZ(Morpion.java:16)
    	at morpion.Morpion.<init>(Morpion.java:26)
    	at morpion.Morpion.main(Morpion.java:55)
    /home/jonass/.cache/netbeans/8.1/executor-snippets/run.xml:53: Java returned: 1
    BUILD FAILED (total time: 0 seconds)
    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Par défaut
    Salut,

    le message d'erreur est assez explicite, non?

    Tu as un NullPointerException. Cela veut dire que tu essayes d'accéder à une variable/un objet qui n'est pas initialisée.

    Dans ton main, tu fais appel au constructeur, dans ton constructeur, tu appelles la méthode RAZ().

    Dans la méthode RAZ, ligne 16 (c'est marqué dans la stackstrace), tu essayes de récupérer grille.length. Sauf que tu n'as jamais initialisé l'objet grille...

  3. #3
    Membre éclairé Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Par défaut
    Merci Carhiboux
    le message d'erreur est assez explicite, non?

    Tu as un NullPointerException.
    Non, le message d'erreur n'est pas assez explicite pour moi, par contre votre explication l'est parfaitement. J'ai compris mon erreur et je l'ai corrigée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private int[][] grille=new int[3][3];
    au passage, j'ai remarqué une erreur dans l'élaboration du code de la méthode setCase. il fallait écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     public void setCase(int i,int j,int val)
        {
            if(i<0 || i>= grille.length || j<0 || j>= grille[i].length || (val != ROND && val!= CROIX) )
            {
                System.out.println("Valeurs incorrectes au set");
            }
            else
            {
                grille[i][j]=val;
            }
     
        }
    Maintenant tout marche à merveille
    Une autre fois merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Par défaut
    Pas de soucis,

    savoir lire une exception et une stacktrace est une compétence primordiale en Java, et indispensable pour bien progresser. Tu auras souvent des exceptions en tout genre (et tu devras toi aussi en générer et en gérer dans certains cas).

    Si on reprends ton exception et sa stacktrace, il faut lire de haut en bas :

    Exception in thread "main" java.lang.NullPointerException => En lançant ton main, tu as eu un NullPointerException
    at morpion.Morpion.RAZ(Morpion.java:16) => Survenu à la ligne 16 de la classe Morpion.java dans la méthode RAZ => c'est donc un des objets/variables utilisé à cette ligne qui est null
    at morpion.Morpion.<init>(Morpion.java:26) => Méthode RAZ qui est appelée par un constructeur de la classe Morpion en ligne 26 (le <init> indique un constructeur)
    at morpion.Morpion.main(Morpion.java:55) => Constructeur appelé dans la méthode main en ligne 55 de ta classe Morpion.java

  5. #5
    Membre éclairé Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Par défaut
    On apprend des choses.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. NullPointerException sur un tableau.
    Par Thibcal dans le forum Collection et Stream
    Réponses: 16
    Dernier message: 02/01/2016, 18h49
  2. NullPointerException sur un tableau de String
    Par floctc dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 20/04/2010, 09h03
  3. [Tableau] NullPointerException sur les tableaux
    Par zsoh dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 18/01/2010, 17h42
  4. Comment faire un Drag&Drop sur un tableau
    Par Stef.web dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2003, 13h12
  5. [VBA-E] Dim dynamique sur un tableau
    Par Vince69 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/12/2002, 13h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo