java.lang.NullPointerException que je ne trouve pas
Bonjour,
J'ai une exception java.lang.NullPointerException qui provoque le message d'erreur:
Code:
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:
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:
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:
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.