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

avec Java Discussion :

Trier des mots


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 25
    Points : 12
    Points
    12
    Par défaut Trier des mots
    Bonjours, je suis débutant en programmation en générale et actuellement j'essaie de faire un petit programme simple qui va trier des mots en ordre croissants.

    J'ai un tableau qui contient la liste des 5 mots que j'ai entrer et un autre tableau dans lequel les plus petit mots seront placer à la suite.

    Le soucis que je rencontre est que je n'arrive pas à éliminer du tri le plus Petit mot qui a été trouver au second tour de boucle, le plus petit et second plus petit au troisième tour et ainsi de suite.

    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
     
    public class TrierMots 
    {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) 
    	{
    		String listeMots[] = new String[6];
    		String plusPetitMot = "";
    		String croissant[] = new String[6];
    		String sortie = "";
    		int i = 0;
    		int j = 0;
    		int k = 4;
    		boolean trier = false;
     
     
    		for (i=0;i<5;i++)
    		{
    			listeMots[i] = JOptionPane.showInputDialog(null,"Entrer un mot svp");
    			croissant[i] = listeMots[i];
    		}
    		i=0;
    		plusPetitMot = listeMots[0];
     
     
    		while(trier == false)
    		{
    			for (j=0;j<k;j++)
    			{
    				if(plusPetitMot.compareTo(listeMots[j+1]) > 0)
    						plusPetitMot = listeMots[j+1];
     
    			}	
     
     
    			croissant[i] = plusPetitMot;
    			plusPetitMot = listeMots[i+1];
    			sortie = sortie + croissant[i] + "\n";
    			i++;
    			k--;
    			if(croissant[0].compareTo(croissant[1]) <=0 && croissant[1].compareTo(croissant[2]) <=0 && croissant[2].compareTo(croissant[3]) <=0 && croissant[3].compareTo(croissant[4]) <=0)
    				trier = true;
     
     
    		}	
     
    		JOptionPane.showMessageDialog(null,sortie);
     
    	}
     
    }
    J'utilise un second tableau, car je ne connais pas d'avance l'indice de mon plus petit mot dans le tableau listeMot[] Comment dois-je faire pour éliminer du tri tout ce que je place dans le tableau croissant[] ?

  2. #2
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonsoir,

    Le mieux est d'utiliser ce que Java met à disposition:
    http://docs.oracle.com/javase/1.5.0/...java.util.List)

    Il faut juste remplacer le tableau par une list et invoquer Collections.sort sur la liste.

  3. #3
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    sauf que .... quel est l'ordre alphabétique entre un 'é', 'e' et 'è' ???
    et bien il ne faut pas trier "à la main" mais utiliser un java.text.Collator
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 75
    Points : 138
    Points
    138
    Par défaut
    Sauf que je pense que c'est pas en ordre alphabétique qui veux trier sont tableau, mais du plus petit au plus grand

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    Etant donné qu'il travail sur un tableau, il devrait plutôt utiliser Arrays.sort que Collections.sort. S'il veut effectuer un tri particulier il devrait définir son propre Comparator et le passer en paramètre de Arrays.sort([], Comparator)

    Il créer une classe qui implémente Comparator :
    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
    public class LongueurStringComparator implements Comparator<String>
    {
     
        /**
         * (methode de remplacement) {@inheritDoc}
         * 
         * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
         */
        public int compare(String o1, String o2)
        {
            // éventuellement vérifier la nullité des variables si elles peuvent être null
            if (o1.length() > o2.length())
            {
                return 1;
            }
            else if (o1.length() == o2.length())
            {
                return 0;
            }
            else
            {
                return -1;
            }
        }
     
    }
    Puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Arrays.sort(listeMots, new LongueurStringComparator());
    // a partir de cet endroit listeMots est trié par ordre croissant, des mot les plus petits aux plus grands
    Romain.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Je ne souhaite pas utiliser de fonction prédéfini pour réaliser le principal objectif, mais bien faire un algorithme

    j'utilise un tableau, car je commence par essayer de faire un truc bien avec un nombre connu de mots. Ce que je n'ai pas encore réussi à faire, car je suis encore plutôt noob en prog :s

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,
    Si j'ai bien compris tu veux trier par ordre alphabétique une série de 5 mots. Tout d'abord, comme il n'y a pas de test sur les caractères employés durant la saisie des mots, il faut considérer qu'il sont tous écris de la même façon (minuscule sans accents ou majuscule) et sans autre caractère. En effet le test compareTo() compare le code ASCII de chaque caractère et non sa place dans l'alphabet.

    Partant de la voici ma solution :

    Je compare les éléments du tableau 2 à 2 (0 avec 1,1 avec 2, 2 avec 3, 3 avec 4) et si i > (i+1) alors j'échange leur place dans le tableau.
    Ainsi, l'élément le plus grand se trouve à la fin du tableau.
    Je recommence mais avec 1 tour de moins (0 avec 1, 1 avec 2, 2 avec 3) car on sait déjà que le dernier élément est le plus grand.
    Ainsi, le 2ième élément le plus grand est maintenant en avant dernière position du tableau.
    je recommence avec 1 tour de moins.....ect



    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
    import javax.swing.*;
     
    public class TrierMots {
     
    	public static void main(String[] args) {
     
    		String[] listeMots = new String[5];
    		String sortie = "";
    		for (int i=0;i<5;i++) {
    			listeMots[i] = JOptionPane.showInputDialog(null,"Entrer un mot svp");
    		}
    		String temp;
    		for (int i=0; i<4;i++) {
    			for (int j=0;j<4-i;j++) {
    				if(listeMots[j].compareTo(listeMots[j+1])>0) {
    					temp = listeMots[j];
    					listeMots[j] = listeMots[j+1];
    					listeMots[j+1] = temp;
    				}
    			}
    		}
    		for(int k=0;k<5;k++) {
    			sortie = sortie + listeMots[k]+"\n";	
    		}
    		JOptionPane.showMessageDialog(null,sortie);
     
    	}
    }

Discussions similaires

  1. trier des array selon le nombre de mots communs
    Par thib3113 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 15/05/2012, 18h38
  2. Comment changer des mots dans un fichier?
    Par ptitbonum dans le forum Linux
    Réponses: 5
    Dernier message: 07/04/2004, 23h42
  3. Mettre la première lettre des mots en majuscule
    Par seb.49 dans le forum Langage
    Réponses: 8
    Dernier message: 23/05/2003, 14h26
  4. Au sujet des mots de passe
    Par FranT dans le forum Langage
    Réponses: 6
    Dernier message: 17/09/2002, 22h16

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