Exercice Java : tri de mots

Exercice java traite le  sujet suivant:

Programme java qui lit une suite de mots et les affiche par ordre alphabétique

Examinons ce petit Exercice java:



Écrire un programme qui lit une suite de mots au clavier et qui les affiche triés par ordre alphabétique. On supposera que ces mots ne contiennent que des lettres non accentuées (majuscules ou minuscules). Le nombre de mots sera fourni en données et l’exécution se présentera ainsi :

Combien de mots ? 5
donnez vos mots
javaScript
Pascal
BaSiC
Java
ADA
Liste par ordre alphabetique :
ADA
BaSiC
Java
javaScript
Pascal

Notez bien que les mots sont affichés avec leur “casse” d’origine mais que celle-ci n’influe pas sur le tri qui respecte l’ordre alphabétique traditionnel (qui ne distingue pas les majuscules des minuscules).

Les différentes chaînes constituant les mots sont lues dans un tableau d’objets de type String dont la dimension nous est fournie en donnée. Pour en effectuer le tri, nous recourons à la méthode simple du “tri à bulle” qui consiste à comparer chaque élément à tous ses suivants, en procédant à un échange chaque fois qu’ils ne sont pas dans le bon ordre. On notera bien qu’ici, on peut se contenter de trier uniquement les références et non pas les chaînes elles-mêmes, ce qui se fait très simplement en Java.
Pour les comparaisons de chaînes, nous pouvons recourir à la méthode compareTo. Cependant, celle-ci utilise comme ordre des caractères celui induit par la valeur de leur code. Cela signifie que les majuscules sont séparées des  minuscules. Il nous faut donc faire porter le tri sur les (références des) chaînes converties (par exemple) en majuscules  (à l’aide de la méthode toUpperCase). Mais comme l’énoncé nous impose d’afficher les mots triés suivant leur casse
d’origine, nous devons conserver à la fois le tableaux des références des mots tels qu’ils ont été fournis et un tableau des références sur ces mêmes mots convertis en majuscules. De plus, les deux tableaux doivent être triés en parrallèle.

public class TrisMots
{
  public static void main (String args[])
  { // lecture des donnees
    System.out.print ("Combien de mots ? ") ;
    int nMots = Clavier.lireInt() ;
    String [] mots = new String[nMots] ;
    System.out.println ("donnez vos mots") ;
    for (int i=0 ; i<nMots ; i++)
      mots[i] = Clavier.lireString() ;
    // conversion de chaque mot en minuscules
    String [] motsMin = new String[nMots] ;
    for (int i=0 ; i<nMots ; i++)
      motsMin[i] = mots[i].toLowerCase() ;
    //tri par reorganisation des references(mots d'origine et minuscules)
    // (on compare chaque mot (minuscule) a tous ses suivants)
    String temp ;
    for (int i=0 ; i<nMots-1 ; i++)
      for (int j=i+1 ; j<nMots ; j++)
        if (motsMin[i].compareTo(motsMin[j]) >= 0)
         {temp = motsMin[i]; motsMin[i] = motsMin[j]; motsMin[j] = temp;
            temp = mots[i] ;    mots[i] = mots[j] ;   mots[j] = temp;
          }
    // affichage des chaines triees
    System.out.println ("Liste par ordre alphabetique :") ;
    for (int i=0 ; i<nMots ; i++)        // ou (depuis JDK 5.0) :
      System.out.println (mots[i]) ;     // for (String mot : mots)
  }                                      //  System.out.println (mot) ;
}

Speak Your Mind

*


*