Problème de méthode .sort() JAVA

Discussion dans 'Web, design' créé par eGm_, 24 Janvier 2007.

Statut de la discussion:
Fermée.
  1. Offline

    eGm_ grand marabout de l'enfant Jésus saint sauveur

    Voila j'ai un petite problème avec ma méthode .sort() a l'affichage elle m'affiche toujours la même ligne.


    Code:
    import java.util.*;
    import clavier.*;
    
    public class Application{
    	public static void main(String [] args){
    		
    		Dictionnaire dico = new Dictionnaire();
    		
    		dico.ajout("sun","soleil");
    		dico.ajout("chiken","poulet");
    		dico.ajout("mouse","souris");
    		dico.ajout("rabbit","lapin");
    	
    		//tri sur l'anglais + affichage.
    		
    		dico.triAnglais();
    		
    		//tri sur le francais + affichage
    		
    		dico.triFrancais();
    		
    		
    		//nasdro mother's a Wookie
    	
    	}
    	
    	
    }



    Code:
    import java.util.*;
    
    class Dictionnaire extends Mot{
    	
    	ArrayList tab; 
    	
    	Mot mot = new Mot();
    	
    
    	public Dictionnaire(){
    		tab = new ArrayList();
    		System.out.println("Création d'un objet Dictionnaire");
    		System.out.println("");
    	}
    
    	public void ajout(String anglais, String francais){
    		mot.setAnglais(anglais);
    		mot.setFrancais(francais);
    		tab.add(mot);
    	}
    	
    	
    	void triAnglais(){
    		Collections.sort(tab);  // utilise la méthode CompareTo
    		affiche();
    		
    	}
    	
    	void triFrancais(){
    		Collections.sort(tab);	// utilise la méthode CompareTo
    		affiche();
    	}
    	
    	void rechercheFrancais(){
    	}
    	
    	void rechercheAnglais(){
    	}
    	
    	void affiche(){
    		int i;
    		String temp;
    		for(i=0; i<tab.size();i++)
    		{
    			temp = toString(tab.get(i));
    			System.out.println(temp);
    		}
    	}



    Code:
    import java.util.*;
    
    class Mot implements Comparable{
    	
    	private String anglais;
    	private String francais;
    	
    	public Mot(){
    	}
    	
    	public Mot(String anglais, String francais){
    		this.anglais = anglais;
    		this.francais = francais; 
    	}
    	
    	/*
    	public int compareTo(Object o) throws ClassCastException 
    	{
    		if(!(o instanceof Mot))						// test si O est bien objet de type mot 
      			throw new ClassCastException("Objet n'est pas de type Mot");
      			  
    		Mot mot = (Mot) o;  //casting de l'objet recus (o)
    		
    		if(mot.getAnglais().compareTo(anglais) == 0)
    		
      		return mot.getFrancais().compareTo(francais);
      		  		
    		return mot.getAnglais().compareTo(anglais);
    		
    	} */
    	
    
     public int compareTo(Object o) throws ClassCastException
    {
    	if(!(o instanceof Mot))						// test si O est bien objet de type mot 
      			throw new ClassCastException("Objet n'est pas de type Mot");
    	
    	String anglais1 = ((Mot) o).getAnglais();
    	String anglais2 = this.getAnglais();
    
        if (anglais1.compareTo(anglais2) == -1)  return -1; 
          else if(anglais1.compareTo(anglais2) == 0 ) return 0; 
          else return 1; 
    
     
    
    } 
    	
    
    	public String getAnglais()
    	{
    		return anglais;				
    	}
    	
    	public String getFrancais()
    	{
    		return francais;				
    	}
    	
    	public void setAnglais(String anglais)
    	{
    		this.anglais=anglais;				
    	}
    	
    	public void setFrancais(String francais)
    	{
    		this.francais=francais;				
    	}
    	
    	public String toString(Object o){
    		return o.toString();
    	}
    	
    	public String toString() {
    
    	return anglais + ": " + francais;
    
    	}
    
    }

    C'est coder a l'arrache mais bon.

    a l'affichage ca m'affice toujours rabbit : lapin

    Merci d'avance si quelqu'un trouve :p
    eGm_, 24 Janvier 2007
    #1
  2. Offline

    TITM4v3rick 1337

    normal, tu fais toujours un tri sur les traductions anglaises...

    Voici une solution

    A noter : personnellement, je n'aurai pas fait en sorte que le Dictionnaire hérite de Mot car conceptuellement parlant un dictionnaire n'est pas un mot mais un ensemble de mots...

    D'un point de vue implémentation de dictionnaire, on ne fait pas cela non plus, on ne s'amuse pas à "hard coder" des traductions dans des objets. Par contre, tu crées un dictionnaire sur base d'un document XML ou de fichiers de propriétés ou encore d'une base de données que tu interroges à l'aide d'un service.

    Autre point : les méthodes d'affichages avec des println, c'est un peu vieillot et du point de vue objet, ce n'est pas "top" non plus car tu peux considérer que ton dictionnaire est un modèle de données. Or, un modèle de données ne se préoccupe pas de la présentation - de l'affichage des résultats. Pour plus d'informations à ce sujet, il serait intéressant de jeter un oeil au Design Pattern MVC (Modèle/Model Vue/View Contrôleur/Controller)

    Enfin coder des méthodes en français ainsi que les commentaires sont à éviter en milieu professionnel. (C'est une question de maintenance du code par d'autres programmeurs que toi)

    Code:
    package dico;
    
    /**
     * 
     * @author M4v3rick
     * @version 0.1 24-janv.-07<br/>
     */
    public class Mot {
    
    	private String anglais;
    
    	private String francais;
    
    	//
    	// CONSTRUCTORS
    	//
    	
    	public Mot() {
    	}
    
    	public Mot(String anglais, String francais) {
    		this.anglais = anglais;
    		this.francais = francais;
    	}
    	
    	//
    	// SETS
    	//
    	
    	public void setAnglais(String anglais) {
    		this.anglais = anglais;
    	}
    
    	public void setFrancais(String francais) {
    		this.francais = francais;
    	}
    
    	//
    	// GETS
    	//
    	
    	public String getAnglais() {
    		return anglais;
    	}
    
    	public String getFrancais() {
    		return francais;
    	}
    
    	public String toString(Object o) {
    		return o.toString();
    	}
    
    	@Override
    	public String toString() {
    		return anglais + ": " + francais;
    	}
    
    }
    Code:
    package dico;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    /**
     * 
     * @author M4v3rick
     * @version 0.1 24-janv.-07<br/>
     */
    @SuppressWarnings("serial")
    public class Dictionnaire extends Mot {
    
    	private List<Mot> tab;
    	
    	//
    	// CONSTRUCTORS
    	//
    	
    	public Dictionnaire() {
    		tab = new ArrayList<Mot>();
    		System.out.println("Création d'un objet Dictionnaire\n");
    	}
    
    	//
    	// SETS
    	//
    	
    	public void ajout(String anglais, String francais) {
    		Mot mot = new Mot();
    		mot.setAnglais(anglais);
    		mot.setFrancais(francais);
    		tab.add(mot);
    	}
    
    	public void triAnglais() {
    		Collections.sort(tab, new Comparator<Mot>() {
    			public int compare(Mot m1, Mot m2) {
    				if (m1 != null && m2 != null) {
    					String s1 = m1.getAnglais();
    					String s2 = m2.getAnglais();
    					if (s1 != null) {
    						return s1.compareTo(s2);
    					}
    				}
    				return -1;
    			}
    		});
    		affiche();
    	}
    
    	public void triFrancais() {
    		Collections.sort(tab, new Comparator<Mot>() {
    			public int compare(Mot m1, Mot m2) {
    				if (m1 != null && m2 != null) {
    					String s1 = m1.getFrancais();
    					String s2 = m2.getFrancais();
    					if (s1 != null) {
    						return s1.compareTo(s2);
    					}
    				}
    				return -1;
    			}
    		});
    		affiche();
    	}
    
    	public void rechercheFrancais() {
    		// TODO : nothing ?
    	}
    
    	public void rechercheAnglais() {
    		// TODO : nothing ?
    	}
    
    	public void affiche() {
    		for (int i = 0; i < tab.size(); i++) {
    			System.out.println(toString(tab.get(i)));
    		}
    		System.out.println();
    	}
    }
    Code:
    package dico;
    
    /**
     *
     * @author M4v3rick
     * @version 0.1 24-janv.-07<br/>
     */
    public class Application {
    	
    	public static void main(String [] args){
    		
    		Dictionnaire dico = new Dictionnaire();
    		
    		dico.ajout("sun","soleil");
    		dico.ajout("chiken","poulet");
    		dico.ajout("mouse","souris");
    		dico.ajout("rabbit","lapin");
    	
    		//tri sur l'anglais + affichage.
    		
    		dico.triAnglais();
    		
    		//tri sur le francais + affichage
    		
    		dico.triFrancais();
    		
    		
    		//nasdro mother's a Wookie
    	
    	}
    
    }
    TITM4v3rick, 24 Janvier 2007
    #2
Statut de la discussion:
Fermée.