IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

tri générique entre objets


Sujet :

Langage Java

  1. #21
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Comme je l'ai dit il faut que les objets implémentent Comparable...

    Si ce n'est pas le cas, tu dois utiliser un Comparator qui fera cette comparaison, et la méthode Arrays.sort() correspondante...


    Les méthodes Arrays.sort() sont déjà génériques !

    a++

  2. #22
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    voilà, j'ai essayer comme tu me l'as dis mais il y a toujours un bobo...
    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
     
    public class Utilitaires {
     
    // Tri générique d'objects contenus dans un tableau
    public static <T extends Comparable<T>> T triGen(T[] trigen) {
    boolean trie = false;
    while (!trie) {
    trie = true;
    for (int j = 0; j < trigen.length; j++) {
    T a = trigen[j];
    T b = trigen[j + 1];
    if ( a.compareTo(b)> 0) {
    swapper(trigen, j, j + 1);
    trie = false;
    }
    }
    }
    return trigen;----------->impossible de convertir T[] en T donc erreur
    }
    et quand je retourne un null;
    j'ai cette erreur dans mon programme principal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Cannot cast from Coloriage to Coloriage[]
    Bound mismatch: The generic method triGen(T[]) of type Utilitaires is not applicable for the arguments (Coloriage[]). The inferred type Coloriage is not a valid substitute for the bounded parameter <T extends Comparable<T>>
    at Coloriage.Principal.main(Principal.java:62)

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut
    Pour t'entrainer, je te conseillerais de le faire d'abord sans passer par les generics, avec une classe "personnelle" (implementant donc Comparable voir Comparator).

    Une fois que tu y arrive, tu pourra convertir pour utiliser les generics, et donc n'importe quel objet (comparable bien entendu).

    Sinon, pour ta méthode, elle retourne "T", et non "T[]".

  4. #24
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cashmoney Voir le message
    voilà, j'ai essayer comme tu me l'as dis mais il y a toujours un bobo...
    Non moi j'ai dit d'utiliser Arrays.sort() directement


    Citation Envoyé par cashmoney Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    return trigen;----------->impossible de convertir T[] en T donc erreur
    }
    Pourquoi retourner une valeur ? Et pourquoi T alors que tu as un T[] ???

    Citation Envoyé par cashmoney Voir le message
    j'ai cette erreur dans mon programme principal
    Et quel est le code correspondant à cette erreur ?

    a++

  5. #25
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    le code c'est celui-là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Cannot cast from Coloriage to Coloriage[]
    Bound mismatch: The generic method triGen(T[]) of type Utilitaires is not applicable for the arguments (Coloriage[]). The inferred type Coloriage is not a valid substitute for the bounded parameter <T extends Comparable<T>>
    at Coloriage.Principal.main(Principal.java:62)

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut
    Non, je pense qu'il voulait dire le code JAVA, postes ta méthode main

  7. #27
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Voici mon program priincipal
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    public class Principal {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Couleur rouge = Couleur.ROUGE;
    		Couleur bleu = Couleur.BLEU;
     
    		Coloriage c1 = new Coloriage(bleu);
    		Coloriage c2 = new Coloriage(rouge);
    		Coloriage c3 = new Coloriage(Couleur.ORANGE);
    		Coloriage c4 = new Coloriage(Couleur.VERT);
     
    		c1 = new Coloriage(c2);
    		c1 = new Coloriage("bleu");
     
    		if (c1.equals(c1))
    			Afficher.obj("\n c1 == c1 ");
    		if (c1.equals(c2))
    			Afficher.obj("\n c1 == c2 ");
    		c1.setCouleur("BLEU");
    		c1.setCouleur(Couleur.BLEU);
    		Coloriage c10 = c1.melanger(c2);
     
    		Afficher.obj((c10));
    		Afficher.obj(c10.toString());
    		Afficher.obj(c10);
    		Coloriage tabCoul[] = new Coloriage[4];
    		tabCoul[0] = c1;
    		tabCoul[1] = c2;
    		tabCoul[2] = c3;
    		tabCoul[3] = c4;
    		if (c1.compareTo(c2) == 0 )
    			Afficher.obj("==");
    		Afficher.obj("\n tabCoul = ");
    		for (int i = 0; i < tabCoul.length; i++) {
    			Afficher.obj("\n  " + tabCoul[i]);
    		}
    		Coloriage tabCoulTrie[] = trier(tabCoul);
    		Afficher.obj("\n tabCoulTrie = ");
    		for (int i = 0; i < tabCoulTrie.length; i++) {
    			Afficher.obj("\n  " + tabCoulTrie[i]);
    		}
    tabCoul[0].setCouleur(Couleur.VERT);
    tabCoul[1].setCouleur(Couleur.ROUGE);
    tabCoul[2].setCouleur(Couleur.BLEU);
    tabCoul[3].setCouleur(Couleur.ORANGE);
    Coloriage tabCoulTrie2[] = (Coloriage[]) Utilitaires.triGen(tabCoul);
     
    triGen erreur ---> la methode triGen(Comprable[]) dans le type utilitaire nest pas appicable pour coloriage[]
     
    Afficher.obj("\n tabCoulTrie 2 = ");
    for (int i=0;i<tabCoulTrie2.length;i++){
    Afficher.obj("\n : "+tabCoulTrie2[i]);
    }
    }
    private static Coloriage[] trier(Coloriage[] tabCoul) {
    // TODO Auto-generated method stub
    boolean trie = false;
    while(!trie){
    trie = true;
    for(int j=0;j<tabCoul.length-1;j++){
    if(tabCoul[j].getCouleur().ordinal() > tabCoul[j+1].getCouleur().ordinal() ){
    permuter(tabCoul, j, j+1);
    trie = false;
    }
    }
    }
    return tabCoul;
    }
     
    private static void permuter(Coloriage[] tab, int i, int j) {
    // TODO Auto-generated method stub
    Coloriage temp = tab[i];
    tab[i] = tab[j];
    tab[j] = temp;
    }
    }
    Mes différentes Classes
    Couleur
    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
     
    public enum Couleur {
     
    	ROUGE("ROUGE"), VERT("VERT"), BLEU("BLEU"), ORANGE("ORANGE"), JAUNE("JAUNE"), VIOLET("VIOLET");
    	private String libelle;
    	private Couleur (String inLabel){
    		this.libelle = inLabel;
    	}
    	public String getLibelle(){
    		return libelle;
    	}
    	public void setLibelle( String inLabel){
    		this.libelle = inLabel;
    	}
    }
    Coloriage

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
     
    public class Coloriage implements Comparable<Coloriage> {
     
    	private Couleur c;
     
    	public Coloriage() {
    		// TODO Auto-generated constructor stub
    		c = Couleur.ROUGE;
    	}
     
    	/**
             * @param c
             */
    	public Coloriage(Couleur inC) {
     
    		this.c = inC;
    	}
     
    	// constructeur de recopie
    	public Coloriage(Coloriage inCol) {
    		// TODO Auto-generated constructor stub
     
    		this.c = inCol.c;
     
    	}
     
    	public Coloriage(String str) {
    		// TODO Auto-generated constructor stub
    		this.setCouleur(str);
     
    	}
     
    	public Couleur getCouleur() {
    		// TODO Auto-generated method stub
    		return c;
    	}
     
    	public void setCouleur(Couleur inC) {
    		// TODO Auto-generated method stub
    		this.c = inC;
    	}
     
    	public void setCouleur(String str) {
    		if (str.toUpperCase().equals(("ROUGE")))
    			this.c = Couleur.ROUGE;
    		else if (str.toUpperCase().equals(("VERT")))
    			this.c = Couleur.VERT;
    		else if (str.toUpperCase().equals(("BLEU")))
    			this.c = Couleur.BLEU;
    		else if (str.toUpperCase().equals(("ORANGE")))
    			this.c = Couleur.ORANGE;
    		else if (str.toUpperCase().equals(("JAUNE")))
    			this.c = Couleur.JAUNE;
    		else if (str.toUpperCase().equals(("VIOLET")))
    			this.c = Couleur.VIOLET;
    	}
     
    	public Coloriage melanger(Coloriage cl) {
    		// TODO Auto-generated method stub
    		if ((this.c == Couleur.ROUGE) && (cl.getCouleur() == Couleur.BLEU)
    				|| (this.c == Couleur.BLEU)
    				&& (cl.getCouleur() == Couleur.ROUGE))
    			cl = new Coloriage(Couleur.VIOLET);
    		else if ((this.c == Couleur.ROUGE) && (cl.getCouleur() == Couleur.VERT)
    				|| (this.c == Couleur.VERT)
    				&& (cl.getCouleur() == Couleur.ROUGE))
    			cl = new Coloriage(Couleur.JAUNE);
    		else if ((this.c == Couleur.ROUGE)
    				&& (cl.getCouleur() == Couleur.JAUNE)
    				|| (this.c == Couleur.JAUNE)
    				&& (cl.getCouleur() == Couleur.ROUGE))
    			cl = new Coloriage(Couleur.ORANGE);
    		return cl;
     
    		// return null;
    	}
     
    	public int compareTo(Coloriage cl) {
    		this.c = cl.getCouleur();
    		if (this.c.ordinal() > c.ordinal())
    			return 1;
    		else if (this.c.ordinal() < c.ordinal())
    			return -1;
    		else
    			return 0;
    	}
     
    	public String toString() {
    		return c.getLibelle();
    	}
    }
    Utilitaires que j'ai encore modifié

    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 class Utilitaires {
     
     
    	// Tri générique d'objects contenus dans un tableau
    	public static Comparable[] triGen(Comparable[] trigen) {
    	    boolean trie = false;
    	    while (!trie) {
    	        trie = true;
    	        for (int j = 0; j < trigen.length-1; j++) {
    	            Comparable a = trigen[j];
    	            Comparable b = trigen[j+1];
    	            if (a.compareTo(b) > 0) {
    	                swapper(trigen, j, j + 1);
    	                trie = false;
    	            }
    	        }
    	    }
    	    return trigen;
    	}
     
     
    	public static <T> void swapper(T[] tab, int i, int j) {
    		// TODO Auto-generated method stub
    		T temp = tab[i];
    		tab[i] = tab[j];
    		tab[j] = temp;
    	}
    }
    Voilà, je pense que vous pourrez tester et essayer de m'aider.
    Merci à tous

  8. #28
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    J'ai suivis vos conseil, je me suis penché sérieusement sur toutes les infos que vous m'avez donner. J'ai sorti ce code, mais toujours pareils, mon pgm principal fait des siennes.
    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 class Utilitaires<E extends Comparable<? super E>> {
     
    	// Tri générique d'objects contenus dans un tableau
    	public static <E extends Comparable<? super E>> E[] triGen(E[] trigen) {
    		boolean trie = false;
    		while (!trie) {
    			trie = true;
    			for (int j = 0; j < trigen.length-1; j++) {
     
    				if (trigen[j].compareTo(trigen[j + 1]) > 0) {
    					swapper(trigen, j, j + 1);
    					trie = false;
    				}
    			}
    		}
    		return trigen;
    	}
    	public static <E extends Comparable<? super E>> E maximum(E a, E b) {
    		return a.compareTo(b) > 0 ? a : b;
    	}
     
    	public static <T> void swapper(T[] tab, int i, int j) {
    		// TODO Auto-generated method stub
    		T temp = tab[i];
    		tab[i] = tab[j];
    		tab[j] = temp;
    	}
    }
    dans mon pgm principal j'ai cette erreur au niveau du triGen.
    Coloriage tabCoulTrie2[] = (Coloriage[]) Utilitaires.triGen(tabCoul);
    triGen----> disparité d'association.la méthode générique trigen(E []) n'est pas appicable pour coloriage[].

    j'avoue que je comprend plus rien.

  9. #29
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Ta classe Coloriage n'implémente pas Comparable...

    a++

  10. #30
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Merci l'ami, pour ton aide.
    Fallait le savoir, oufffff

  11. #31
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cashmoney Voir le message
    Fallait le savoir, oufffff
    Ben cela a été dit et tu le précise clairement dans le type Generics de ta méthode...


    Sinon je réitère ma question : Pourquoi ne pas utiliser Arrays.sort() ???

    a++

  12. #32
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Ha bon, celà a été dit, où ça?? en fait je voulais pas utiliser array.sort() parce que ce n'était pas le but de l'exercice. Je suis débutant alors

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Dépendance entre objets
    Par bobunny dans le forum Oracle
    Réponses: 6
    Dernier message: 24/03/2011, 16h22
  2. Association entre objet Id ou référence ?
    Par grosFab dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 19/04/2007, 14h41
  3. Réponses: 6
    Dernier message: 09/08/2006, 23h35
  4. [3D] Probléme de jointure entre objet sous 3DSMAX
    Par astragoth dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 11/02/2006, 02h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo