Problème avec la fontion CompareTo

Messages postés
33
Date d'inscription
samedi 4 décembre 2010
Statut
Membre
Dernière intervention
31 mars 2016
- - Dernière réponse : KX
Messages postés
16077
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
22 novembre 2019
- 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.
Afficher la suite 

2 réponses

Messages postés
33
Date d'inscription
samedi 4 décembre 2010
Statut
Membre
Dernière intervention
31 mars 2016
0
Merci
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.
Commenter la réponse de stealone
Messages postés
16077
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
22 novembre 2019
88
0
Merci
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;
    }
}
Commenter la réponse de KX