Bonjour à tous,
J'ai une erreur à l'exécution :
Exception in thread "main" java.lang.ClassCastException:
Sur :
Où tabTrie est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tabTrie=(Personne[])Personne.tri(tabObj,new Personne());
et tabObj est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Personne[] tabTrie; //Classe Personne
Le but du code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Object[] tabObj;
est d'utiliser une seule méthode ou fonction dans une Interface Comparateur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tabTrie=(Personne[])Personne.tri(tabObj,new Personne());
La méthode ést dans la classe Personne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 package Cours; //cette interface devra être implémentée par les classes //pour lesquelles une comparaison des instances est envisagée public interface Comparateur { // cette méthode pourra être appelée pour comparer les deux // objets reçus en paramètre // la méthode retourne un entier dont la valeur dépend // des règles suivantes // 1 si linstance o1 est supérieure à o2 // 0 si les deux instances sont égales // -1 si linstance o1 est inférieure à o2 // -99 si la comparaison est impossible int compare2(Object o1,Object o2); public static final int INFERIEUR=-1; public static final int EGAL=0; public static final int SUPERIEUR=1; public static final int ERREUR=-99; } // Une telle interface qui ne contient que la définition dune seule // et unique méthode est appelée interface fonctionnelle.
Je dois pour utiliser cette fonction de tri fournir 2 paramètres :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 public static Object[] tri(Object[] tablo,Comparateur trieur) { int i,j; Object c; Object[] tabloTri; tabloTri=Arrays.copyOf(tablo,tablo.length); for (i=0;i< tabloTri.length;i++) { for( j = i + 1; j<tabloTri.length;j++) { // utilise la fonction compare de lobjet reçu en paramètre // pour comparer le contenu de deux cases du tableau if (trieur.compare2(tabloTri[j],tabloTri[i])==Comparateur.INFERIEUR) { c = tabloTri[j]; tabloTri[j] = tabloTri[i]; tabloTri[i] = c; } else if (trieur.compare2(tabloTri[j],tabloTri[i])==Comparateur.ERREUR) { return null; } } } return tabloTri; }
- le tableau à trier : tabObj
- une instance de classe qui implémente l'interface Comparateur : new Personne()
Si quelqu'un a une idée MERCI
Partager