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 :

Compter le nombre de lettres différentes dans un mot


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2017
    Messages : 15
    Par défaut Compter le nombre de lettres différentes dans un mot
    Bonjour à toutes et à tous,

    Je suis débutant et j’ai un exercice à faire en java.

    Je dois faire un programme qui tire un mot au sort et le programme affiche le nombre de lettres différentes du mot.

    Voila ce que j'ai fait mais cela ne fonctionne pas.

    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 class MotAuSort{
      public static void main(String[] args){
        char[] unmot; 
        for (int num=0; num<1; num=num+1){
          unmot = MOOC.motAuSort();
          for (int numlet=0; numlet<14; numlet=numlet+1)
            System.out.print(unmot[numlet]);
              for(i=0; i<num; i=i+1){
              boolean nouvelle =true;
              if(nouvelle){
                compteur=compteur+1;
                }
              }
            }
          }
    Je n'arrive pas à trouver mon ou mes erreurs.

    Merci d'avance pour votre précieuse aide.

    Chm412
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    1. Premièrement, tu utilises deux variables non déclarées : compteur et i.
      En Java, il faut toujours déclarer toutes les variables. En plus, elles doivent avoir été initialisée avant de pouvoir utiliser leur valeur.
      AJouter donc
      et
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      for(int i=0; i<num; i=i+1) {
      }
    2. Ensuite côté algorithmique
      1. La boucle sur numlet : for (int numlet=0; numlet<14; numlet=numlet+1)Le but de cette boucle est de parcourir les lettres du mot. Tu décides arbitrairement que tous les mots font 14 lettres. Si ce n'est pas le cas, tu auras des erreurs d'exécution. Utiliser plutôt la longueur du mot, donc la taille du tableau unmot :
        for (int numlet=0; numlet<unmot.length; numlet=numlet+1)
      2. La boucle sur i : for(int i=0; i<num; i=i+1){La borne limite supérieure exclue pour i est num, quelque chose de défni par la boucle for (int num=0; num<1; num=num+1){, qui est juste une boucle qui va déterminer le nombre de fois qu'on tire un mot et qu'on compte le nombre de lettres. Quel sens cela peut avoir dans la notion de compter les lettres d'un mot ? Aucun ! Accesoirement, la boucle sur num ne sert pas à grand chose si tu ne changes pas la borne supérieure : on ne fait qu'une seule fois le calcul.
      3. Ensuite, pour compter le nombre de lettres, quelque soit les autres conditions, nécessite de parcourir tout le mot puis ensuite d'afficher le résultat.
        La notion de "lettres différentes" impose de comparer des lettres entre elles. Et de pouvoir savoir qu'une lettre a déjà été rencontrée ou pas. En plus, il ne faut compter une lettre si elle est différente des autres qu'une seule fois.
        Par exemple, dans le mot "rococo", il y a 3 lettres différentes. Le r, le o et le c.
      4. Il y a plusieurs façons de résoudre le problème, mais une des plus simple à mon avis est de faire :
        Code pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        pour toutes les lettres du mot
        si la lettre est rencontrée pour la première fois on la stocke (autrement dit, si la lettre n'a pas déjà été rencontrée)
        fin pour
        A la fin on compte le nombre de lettres stockées et on a le nombre de lettres différentes.
        Donc voici pour commencer (avant de coder), des questions que tu dois te poser
        • comment stocker des lettres ? Sachant qu'une nouvelle lettre ne doit pas écraser une lettre déjà stockée.
        • comment savoir qu'une lettre a déjà été rencontrée ?
        • comment savoir le nombre de lettres stockées à la fin

    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2017
    Messages : 15
    Par défaut Merci beaucoup pour votre aide
    Je vous remercie de votre réponse, malheureusement mes tentatives pour réaliser cet exercice restent vaines. Je vous envoie mon exercice modifié par votre aide.
    Merci beaucoup pour vos nombreuses informations, mais hélas comme je suis débutant, j’ai du mal à vous suivre.
    Faut-il faire un nouveau tableau*?
    Fichiers attachés Fichiers attachés

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Commence par répondre à ces questions :
    Citation Envoyé par joel.drigo Voir le message
    • comment stocker des lettres ? Sachant qu'une nouvelle lettre ne doit pas écraser une lettre déjà stockée.
    • comment savoir qu'une lettre a déjà été rencontrée ?
    • comment savoir le nombre de lettres stockées à la fin
    Citation Envoyé par Chm412 Voir le message
    Faut-il faire un nouveau tableau*?
    Oui, c'est déjà bien : tu as répondu en partie à la première question ("Comment stocker des lettres ?"). On va utilser un tableau pour stocker les lettres du mots, afin de savoir celles qu'on a rencontrée. Le but est de les stocker chacune qu'une seule fois, afin d'avoir le nombre de lettres différentes.
    Comment connaître la taille de ce tableau ? Et bien, dans le pire des cas, chaque lettre du mot sera présente qu'une seule fois dans le mot (donc toutes les lettres seront différentes). Il suffit donc que le tableau ait pour taille la taille du mot, qui est le plus grand nombre de lettres qu'on peut trouver dans le mot.
    Donc tu peux commencer à écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class MotAuSort{
      public static void main(String[] args){
        for (int num=0; num<1; num=num+1){
          char[] unmot = MOOC.motAuSort();
          char[] lettres = new char[unmot.length]; // un tableau pôur stocker les lettres qu'on rencontre dans le mot
          for (int numlet=0; numlet<unmot.length; numlet=numlet+1)
              char c=unmot.charAt(numlet); // la lettre à la position numlet 
     
          }
        ]
      }
    On va parcourir les lettres du mot (la boucle sur numlet). Pour chaque lettre, on va chercher dans le tableau lettres si elle s'y trouve déjà, si oui, on ne fait rien, sinon, on la stocke.

    Donc, comment fait-on :
    • pour mettre la lettre c dans le tableau lettres ?
    • pour qu'à chaque nouvelle lettre, on n'écrase pas celles qui ont déjà été mises dedans ?


    Et ensuite répondre aux deux autres questions précedemment posées...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2017
    Messages : 15
    Par défaut
    J’ai Pu tester votre solution mais un problème m’empêche d’aller jusqu’au bout*: une erreur de déclaration de variable m’est signalée concernant cette ligne*:
    char c = unmot.charAt(numlet); // la lettre à la position numlet

    J’ai effectué plusieurs tests, et je pense que ça vient de mes déclarations de variables dans mes boucles for.
    Faut-il que je mette if après char c = unmot.charAt(numlet);?

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Chm412 Voir le message
    J’ai Pu tester votre solution mais un problème m’empêche d’aller jusqu’au bout*: une erreur de déclaration de variable m’est signalée concernant cette ligne*:
    char c = unmot.charAt(numlet); // la lettre à la position numlet

    J’ai effectué plusieurs tests, et je pense que ça vient de mes déclarations de variables dans mes boucles for.
    Faut-il que je mette if après char c = unmot.charAt(numlet);?
    Oups, c'est de ma faute : unmot n'est pas une String mais un tableau de char, donc c'est :
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. [XL-2010] Compter le nombre de noms différents dans une colonne
    Par mcog2 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 02/12/2015, 08h34
  2. [XL-2007] Compter le nombre de valeurs différente dans une colonne
    Par Mist-e-Fire dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/04/2013, 09h01
  3. Réponses: 1
    Dernier message: 22/05/2012, 19h15
  4. Réponses: 28
    Dernier message: 11/10/2006, 22h36
  5. Réponses: 2
    Dernier message: 28/04/2006, 13h28

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