stealone
Messages postés33Date d'inscriptionsamedi 4 décembre 2010StatutMembreDernière intervention31 mars 2016
-
12 nov. 2015 à 16:58
KX
Messages postés16734Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention24 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.
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) ....
KX
Messages postés16734Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention24 avril 2024127 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;
}
}