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.