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 :

Comparer deux chaines de caractères selon l'ordre alphabétique


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    professeur des ecoles
    Inscrit en
    Septembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : professeur des ecoles

    Informations forums :
    Inscription : Septembre 2020
    Messages : 4
    Par défaut Comparer deux chaines de caractères selon l'ordre alphabétique
    Bonjour à tous ,
    j apprends le java en autodictacte à l 'aide d un livre.
    Je ne sais pas comment résoudre le problème suivant(je planche depuis 48h).
    Qui peut me donner la solution ?
    D avance merci.

    Voici le problème:
    Ecrivez un programme jusqu a ce que l utilisteur entre le mot Fin
    Afficher parmi les mots saisis le premier dans l ordre alphabetique.
    Je sais résoudre la première question mais je ne sais pas répondre à la seconde.(Afficher....)

  2. #2
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 348
    Par défaut
    Bonjour,

    Si la question est simplement de savoir comment afficher, il suffit d'utiliser System.out.println("Votre message"); mais je doute que ce soit votre question. Si votre problème est de trier les mots par ordre alphabétique il faut vous renseigner sur (1) "comment trier des elements" et sur (2) "comment savoir quel mot est avant un autre".

    1) Pour le premier point "comment trier", il y à différentes solution:
    Vous pouvez l'implémenter seul en regardant les différentes techniques de tri et en les implémentant par vous même.
    Mais l'APi collection de Java offre déjà out ce qu'il faut pour trier des élements. Il ne reste donc qu'a savoir comment trier des mots par ordre alphabétique.

    2) Pour le second point, "tri alphabétique", il faut se poser la question de ce qu'est un mot dans votre programme.
    Il y à de grandes chances pour que chaque mot soit un String. Et donc, composé d'un ensemble de char.
    Les caractères sont comparables à des nombres, ils sont d'ailleurs associés à un nombre. Et les choses étant bien faite, le nombre associé à la lettre A est inférieur (avant) celui de la lettre B. Partant de cette information, il est assez facile de comparer deux caractères et donc deux mots.


    Bon amusement

  3. #3
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 348
    Par défaut
    Notez que si vous ne voulez pas trop réfléchir il y à une solution toute faite. Mais ça gâche l'exercice.

  4. #4
    Membre Expert
    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 : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par gervais.b Voir le message
    Et donc, composé d'un ensemble de char.
    Les caractères sont comparables à des nombres, ils sont d'ailleurs associés à un nombre. Et les choses étant bien faite, le nombre associé à la lettre A est inférieur (avant) celui de la lettre B. Partant de cette information, il est assez facile de comparer deux caractères et donc deux mots.
    Cette première approche est malheureusement inexacte:
    trier par exemple avec les codes des caractères comme "e" , "é", "ê" n'est pas correct... les tris alphabétiques obéissent à des règles propres à chaque culture et ne peuvent être tout à fait réalisés avec l'ordre naturel des codes .
    Ceci dit , comme tu le soulignes, il existe une méthode pour faire ça correctement.

  5. #5
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 348
    Par défaut
    En effet, j'ai oublié de préciser cela.

    Mais (pour mon info), est-ce que la ponctuation a de l'importance dans un tri alphabétique ou est-ce qu'une normalisation suffit a résoudre le problème ?

  6. #6
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 486
    Billets dans le blog
    5
    Par défaut
    Pour trier une collection: Collections.sort ( https://docs.oracle.com/javase/7/doc...llections.html ).

    Une String est Comparable ( https://docs.oracle.com/javase/7/doc...omparable.html ).

    Néanmoins, il est toujours possible d'écrire un comparateur ( https://docs.oracle.com/javase/7/doc...omparator.html ) si besoin...

  7. #7
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 348
    Par défaut
    Citation Envoyé par PhilippeGibault Voir le message
    Pour trier une collection: Collections.sort ( https://docs.oracle.com/javase/7/doc...llections.html ).
    L'utilisation du TreeSet<String> permet aussi d'accumuler et trier "automatiquement" les différents mots.

  8. #8
    Membre à l'essai
    Homme Profil pro
    professeur des ecoles
    Inscrit en
    Septembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : professeur des ecoles

    Informations forums :
    Inscription : Septembre 2020
    Messages : 4
    Par défaut
    Bonjour et merci pour votre réponse
    Voici le morceau de programme que j ai ecrit

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Scanner LectureClavier=new Scanner(System.In);
    String Alpha,Mot,Premier;
    do{System.Out.Print("entre un mot");
    Alpha=LectureClavier.Next();}
    while(Alpha!='Fin');
     
    System.Out.Print("entre un mot");
    Mot=LectureClavier.Next();
    if (Alpha.compareto(Mot<0))
    {
    Premier=Alpha}
    else{Premier=Mot}

    Le problème c est que ce n est pas dynamique selon moi.

  9. #9
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 348
    Par défaut
    Bonjour,

    Je vois d'autres erreurs:

    1. Le formatage; Java utilise la lowerCamelCase pour les nom de variables/paramètres/attributs. le UpperCamelCase est réservé aux classes.
    2. Alpha!='Fin'. La comparaison d'objet se fait avec equals. L'opérateur '==' et son inverse ne comparent que la référence.
    3. Vous ne permettez que deux mots.

    Mais l'idée de ne pas stocker tous les mots et juste de garder celui qui est "premier" est une bonne idée.

  10. #10
    Membre à l'essai
    Homme Profil pro
    professeur des ecoles
    Inscrit en
    Septembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : professeur des ecoles

    Informations forums :
    Inscription : Septembre 2020
    Messages : 4
    Par défaut
    Citation Envoyé par gervais.b Voir le message
    Bonjour,

    Je vois d'autres erreurs:

    1. Le formatage; Java utilise la lowerCamelCase pour les nom de variables/paramètres/attributs. le UpperCamelCase est réservé aux classes.
    2. Alpha!='Fin'. La comparaison d'objet se fait avec equals. L'opérateur '==' et son inverse ne comparent que la référence.
    3. Vous ne permettez que deux mots.

    Mais l'idée de ne pas stocker tous les mots et juste de garder celui qui est "premier" est une bonne idée.
    Je ne sais pas comment résoudre le 3 et je cherche depuis olus de deux jours

  11. #11
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 348
    Par défaut
    Citation Envoyé par coumarane Voir le message
    Je ne sais pas comment résoudre le 3 et je cherche depuis olus de deux jours
    Il y à deux solutions, soit vous stockez tous les mots dans une collection (Voyez le lien vers l'API collection posté par PhilippeGibault). Soit vous vérifiez chaque nouvelle entrée pour ne stocker que le "premier" mot. On peux développer un peu la seconde option étant donné que votre exemple de code semble tendre vers ce choix.

    Il vous faut alors deux variables l'une qui est le mot courant et une qui est le premier mot. A chaque itération sur votre boucle vous vérifiez si le mot courant est avant le premier et si, c'est le cas, vous réaffectez celui-ci. La structure de votre code pourrait ressembler à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    do {
       latest = readWord();
       if ( latest.isBefore(first) )  {
         first = latest 
       }
    } while ( !isEnding(latest) )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparer deux chaines de caractères
    Par xenos dans le forum Delphi
    Réponses: 5
    Dernier message: 18/06/2007, 11h01
  2. Comparer deux chaines de caractères
    Par helww dans le forum C++
    Réponses: 10
    Dernier message: 24/04/2007, 11h26
  3. Réponses: 4
    Dernier message: 08/09/2006, 09h41
  4. Comparer deux chaines de caractères dans un if ?
    Par Xplosif² dans le forum C++
    Réponses: 6
    Dernier message: 25/02/2006, 19h21
  5. comparer deux chaines de caractères
    Par peuf23 dans le forum Langage
    Réponses: 3
    Dernier message: 30/01/2006, 14h31

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