Problème avec la fontion CompareTo

stealone Messages postés 33 Date d'inscription samedi 4 décembre 2010 Statut Membre Dernière intervention 31 mars 2016 - 12 nov. 2015 à 16:58
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 12 nov. 2015 à 20:24
Bonjour,

J'ai un message erreur du type NullPointerException provenant d'une méthode compareTO dont voici le code: en fait j'ai une classe Personne qui implémente l'interface Comparable dans laquelle il a fallut redéfinir la méthode. dans la classe Personne j'ai deux champs prives :nomPersonne et prenomPersonne

//plus haut dans ma classe j'ai :
private String nomPersonne;
private String prenomPersonne;


//plus bas dans la classe j'ai la méthode
@Override
public int compareTo(Object o){
String nomPer1 = "";
String prenomPer1= "";
if(this.getClass().equals(o.getClass())){
nomPer1 = ((Personne) o).getNomPersonne();
prenomPer1= ((Personne) o).getPrenomPersonne();

try{
if(nomPer1 .compareTo(this.nomCandidat) == 0){
return prenomPer1.compareTo(this.prenomCandidat);
}
return nomPer1 .compareTo(nomCandidat);
}catch(NullPointerException npe){}
}
return prenomPer1.compareTo(nomCandidat); //voici la ligne qui fait erreur
}

je ne comprends rien j'ai besoin d'un éclaircissement
Merci.

2 réponses

stealone Messages postés 33 Date d'inscription samedi 4 décembre 2010 Statut Membre Dernière intervention 31 mars 2016
Modifié par stealone le 12/11/2015 à 17:27
je reviens poster le message erreur que voici:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.lang.String.compareTo(String.java:1142)
at cm.sygestenieg.entities.schoolacces.Candidat.compareTo(Personne.java:314)
at java.util.ComparableTimSort.binarySort(ComparableTimSort.java:258)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:203)
at java.util.Arrays.sort(Arrays.java:1244)
at java.util.Collections.sort(Collections.java:166) ....

Tout ce qui brille n'est pas or.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
12 nov. 2015 à 20:24
Bonsoir,

Elle est très bizarre ta méthode compareTo.

Déjà, pourquoi est-ce que l'argument est de type Object et pas de type Personne ?

De plus faire des try/catch(NullPointerException npe){} c'est masquer le problème, il vaut mieux vérifier chaque valeur en la comparant à null.

public class Personne implements Comparable<Personne> {

    private String nomPersonne;
    private String prenomPersonne;

    private final int orderIfStringNull = -1; // null est le plus petit String

    private int compare(String str1, String str2) {
        if (str1 == str2)
            return 0;
        if (str1 == null)
            return (str2 == null) ? 0 : orderIfStringNull;
        if (str2 == null)
            return -orderIfStringNull;
        return str1.compareTo(str2);
    }

    private final int orderIfPersonNull = -1; // null est la plus petite Personne

    @Override
    public int compareTo(Personne p) {
        if (this == p)
            return 0;
        if (p == null)
            return -orderIfPersonNull;
        int compareNomPersonne = compare(nomPersonne, p.nomPersonne);
        if (compareNomPersonne != 0)
            return compareNomPersonne;
        int comparePrenomPersonne = compare(prenomPersonne, p.prenomPersonne);
        if (comparePrenomPersonne != 0)
            return comparePrenomPersonne;
        return 0;
    }
}
0
Rejoignez-nous