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

Java Discussion :

java.lang.NullPointerException que je ne trouve pas


Sujet :

Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 167
    Points : 85
    Points
    85
    Par défaut java.lang.NullPointerException que je ne trouve pas
    Bonjour,

    J'ai une exception java.lang.NullPointerException qui provoque le message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Exception in thread "main" java.lang.NullPointerException
            at graphedijkstra.Matrice.coutMinNonTraite(Matrice.java:89)
            at graphedijkstra.Matrice.parcourir(Matrice.java:105)
            at graphedijkstra.Matrice.actions(Matrice.java:68)
            at graphedijkstra.Matrice.<init>(Matrice.java:46)
            at graphedijkstra.Main.main(Main.java:18)
    J'en déduit que dans ma fonction coutMinNonTraite(), mon objet Entree doit être vide. Mais pourtant je ne vois pas COMMENT il pourrait l'être ??

    Voici la méthode coutMinNonTraite:

    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
     
    public Entree coutMinNonTraite(ArrayList<Entree> tb) {
     
            Entree ent = null;
            boolean test = true;
     
            for (int i = 0; i < tb.size() - 1; i++) {
                if (tb.get(i).isTraite() == false && test == true) {
                    ent = tb.get(i);
                    test = false;
                }
                if ((tb.get(i + 1).isTraite() == false) && (tb.get(i + 1).getCout() < ent.getCout())) {
                    ent = tb.get(i + 1);
                }
            }
            return ent;
        }
    Sachant que préalablement, je rempli la table de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void initTable(int somDeb) {
            for (int i = 1; i <= nbSommet; i++) {
                this.table.add(new Entree(i, false, 10000, 0));
            }
            this.table.get(somDeb - 1).setCout(0);
    }
    J'utilise par la suite cette fonction dans une autre fonction qui est :

    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
     
    public void parcourir(int[][] mat, ArrayList<Entree> table) {
     
            System.out.println("\nDEBUT PARCOURS\n");
     
     
            while (fini(table) == false) {
     
                // 1
     
                Entree temp = coutMinNonTraite(table);
                temp.setTraite(true);
                System.out.println("\nLe noeud " + temp.getNoeud() + " a le plus petit cout et vient d'etre validé");
     
                // 2
     
                for (int i = 0; i < this.nbSommet; i++) {
     
                    int coutCourant = mat[temp.getNoeud() - 1][i];
     
                    if (coutCourant > 0 && coutCourant < 10000) {
     
                        table.get(i).setCout(temp.getCout() + coutCourant);
                        table.get(i).setPred(temp.getNoeud());
                        System.out.println("     Le fils " + (i + 1) + " du noeud père " + temp.getNoeud() +
                                " a un cout de " + coutCourant + " et vient d'etre sauvé dans la table (mais non validé)");
     
                        if (i == this.somFin) {
                            table.get(somFin-1).setTraite(true);
                        }
                    }
     
                /*if ((mat[temp.getNoeud() - 1][i] < valLu) && (mat[temp.getNoeud() - 1][i] > 0)) {
                this.valLu = mat[temp.getNoeud() - 1][i];
                }*/
                }
     
                System.out.println("----------------------------------");
            }
     
            System.out.println("\nFIN PARCOURS\n");
        }
    Pour info, je travaille sur l'algorithme de Dijkstra.

    Merci de votre aide.
    "La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !" -Albert Einstein

  2. #2
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Pourtant ta table est bien nulle.

    Ajoute une trace au début de la méthode parcourir, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("table est null = " + table==null);
    A mon avis, ce n'est pas la même table que tu as initialisé.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 167
    Points : 85
    Points
    85
    Par défaut
    Je l'ai ajouté et ça m'affiche false même juste avant l'exception.

    Ce qui veut dire que mon tableau n'est pas nul, je ne comprends pas ??
    "La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !" -Albert Einstein

  4. #4
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Dans ce cas c'est tb.get(i) ou tb.get(i+1) qui est null, suivant laquelle est la ligne 89.

  5. #5
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    Si ce que tu dis est vrai alors il y a une seule chose qui peut être null c'est "ent".
    Car en effet, lors de la première boucle si tb.get(i).isTraite() retourne true alors tu passe sur le 2eme if sans initialiser "ent" et paff nullpointer !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    salut,

    je suis d'accord avec Alkhan !!

  7. #7
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Moi je suis pas d'acord sur le faite qu'un ent null ne declancerai pas de nullpointerException dans ce code la mais plus loin.
    Pour info ca serai bin de savoir c'est quelle ligne la 89

Discussions similaires

  1. Réponses: 20
    Dernier message: 08/06/2006, 11h12
  2. Probleme erreur java.lang.NullPointerException
    Par Tsukaasa dans le forum Langage
    Réponses: 4
    Dernier message: 25/05/2006, 19h19
  3. Réponses: 8
    Dernier message: 11/05/2006, 20h32
  4. [JDIC]Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    Par kedare dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 06/05/2006, 23h45
  5. java.lang.NullPointerException getparent()
    Par guano dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 17/03/2006, 18h38

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