2011-11-04 1 views
0

J'essaie de trouver le minimum d'un tableau. Le tableau contient des nœuds - un nœud contient un élément E et un int de priorité. Je veux trouver le nœud dans le tableau avec la plus petite priorité.java array nullpointer

@Override 
public E min() { 
    Node temp = S[0]; 
    for(int i = 1; i<S.length; i++){ 
     int prio= S[i].getPrioritet(); <-- nullpointer excp. 
     if(prio<temp.getPrioritet()){ 
      temp = S[i]; 
     } 
    } 
    return temp.getElement(); 

Mais je reçois une exception nullpointer lorsque j'essaie de l'utiliser. Est-ce que quelqu'un sait ce que je fais mal?

Voici mon test:

PrioritetArraySorteret<String> p = new PrioritetArraySorteret<String>(); 

    p.insert(1, "Hello"); 
    p.insert(3, "Hi"); 
    p.insert(4, "Hawdy"); 
    System.out.println(p.min()); 

} 
+1

for (int i = 1; i i commence à partir de 1? Combien coûte S.length? Dans ce cas, il semble que S [i] soit nul .... – hovanessyan

Répondre

0

Cela signifie simplement que l'élément à l'un des indices de la matrice S est nulle. Peut-être que vous avez initialisé le tableau à une taille n mais rempli moins de n positions.

comme cela Modifier probablement corriger:

for(int i = 1; i<S.length; i++){ 
    if(S[i] != null) { 
     int prio= S[i].getPrioritet(); <-- nullpointer excp. 
     if(prio<temp.getPrioritet()){ 
      temp = S[i]; 
     } 
    } 
} 

Cela dit, vous pourriez être réinventer la roue ici un peu. En utilisant un simple ArrayList paramétré avec un type que vous définissez qui encapsule une valeur et la priorité ferait. Vous pourriez alors avoir ce type d'outil Comparable avec une méthode compareTo qui utilise la priorité ou écrire un Comparator à utiliser pour trouver le minimum:

List<YourType<String>> list = new ArrayList<YourType<String>>(); 
Collections.min(list); 

Ou, si vous utilisez un comparateur personnalisé:

Collections.min(list, yourComparator); 

- édité pour min au lieu de sort. Pardon.

0

Le tableau S n'a pas été initialisé ou un ou plusieurs éléments ont été initialisés.

1

départ avec i = 0 comme le tableau est indexé

for(int i = 0; i<S.length; i++){ 
    int prio= S[i].getPrioritet(); <-- nullpointer excp. 
    if(prio<temp.getPrioritet()){ 
     temp = S[i]; 
    } 
} 
+0

Non parce que je compare les autres éléments du tableau avec le premier élément du tableau -> Node temp = S [0]; – uthen

+0

Cela ne résout pas réellement le problème, et l'index devait commencer à 1 pour commencer à comparer à partir du deuxième élément puisque le premier a été utilisé comme amorce pour le minimum. –

+0

true mais cela ne ferait aucune différence pour le résultat et est une solution simple à ce qu'il faut faire quand il n'y a qu'un seul élément dans le tableau – Edd