Bonjour,
J'ai une exception java.lang.NullPointerException qui provoque le message d'erreur:
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 ??
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)
Voici la méthode coutMinNonTraite:
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
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; }
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 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); }
Pour info, je travaille sur l'algorithme de Dijkstra.
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"); }
Merci de votre aide.
Partager