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

Java Discussion :

Problème de tirets dans un jeu de pendu


Sujet :

Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Problème de tirets dans un jeu de pendu
    Bonjour à tous,

    Pour un exercice, j'ai fais un pendu qui fonctionne très bien mais impossible d'avoir le bon nombre de tirets correspondant au nombre de caractères à chercher dans la librairie.

    Le nombre de tirets correspond au nombre de caractères dans le plus grand mot c'est à dire 14 et ça pose problème.

    Voici mes sources :
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.Scanner;
    import java.util.Set;
     
    public class Hangman2 {
     
        public static void main(String[] args) {
            Scanner Input = new Scanner(System.in);
     
            String radmWord = String.copyValueOf (MOOC.motAuSort());
     
            int radmNumber = (int) Math.ceil(Math.random() * radmWord);
            int counter = 10;
     
            char[] genRadmLetter = radmWord.toCharArray();
            char[] genRadmLetter2 = radmWord.toCharArray();
            for (int x = 0; x < genRadmLetter.length; x++) {
                genRadmLetter[x] = '-';
            }
     
            Set<Character> guesses = new HashSet<Character>();
            do {
     
                System.out.println("Entrez une lettre");
     
                System.out.println(String.valueOf(genRadmLetter));
                char guessedLetter = Input.next().charAt(0);
     
                if (guesses.contains(guessedLetter)) {
     
                    System.out.println("Vous avez déjà utilisé cette lettre");
     
                } else {
     
                    guesses.add(guessedLetter);
                    boolean found = false;
                   for (int rw = 0; rw < genRadmLetter2.length; rw++) {
     
                        if (genRadmLetter2[rw] == guessedLetter) {
     
                            genRadmLetter[rw] = guessedLetter;
                            found = true;
     
                        }
     
                    }
     
                    if (!found) {
                        System.out.println("Mauvaise lettre, merci de réessayer");
                        counter = counter - 1;
                        System.out.println("Tentatives restantes: " + counter);
                    }
     
                }
     
                boolean result = Arrays.equals(genRadmLetter, genRadmLetter2);
                if (result == true) {
                    break;
                }
     
                if (counter == 0) {
                    break;
                }
     
            } while (counter != 0);
     
            if (counter == 0) {
                System.out.println("Vous avez perdu le mot était: " + radmWord);
            } else {
                System.out.println("Bravo");
                System.out.println("Il vous restait " + counter +" tentatives");
            }
     
        }
     
    }
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    public class MOOC{    
        private static java.util.Scanner scan;
        private static String[] listeMots =
        {"MATERIAU      ", "POLITIQUE     ", "FAVORISER     ", "EXTERIEUR     ", 
         "FINANCER      ", "TRADITION     ", "CONSULTER     ", "POSSIBILITE   ", 
         "POURCENTAGE   ", "FAVORABLE     ", "ORDINATEUR    ", "FONCTIONNER   ", 
         "EXPANSION     ", "LOGICIEL      ", "CONTINUE      ", "LIQUIDATION   ", 
         "BOURSIER      ", "RACHETER      ", "ALIMENTAIRE   ", 
         "ALLEMANDE     ", "INVESTISSEUR  ", "OBLIGATOIRE   ", 
         "UTILISATION   ", "IMMEUBLE      ", "NECESSAIRE    ", 
         "AUGMENTER     ", "BENEFICIER    ", "TRAVAILLER    ", "DIRECTIVE     ", 
         "GENERALE      ", "CONSOLIDATION ", "CORRECTION    ", 
         "INTERVENTION  ", "COMPETITIVITE ", "FONCTION      ", 
         "MINISTRE      ", "PERMANENTE    ", "NUMERIQUE     ", "CROISSANCE    ", 
         "CONSTRUCTEUR  ", "MANAGEMENT    ", "EVIDEMMENT    ", "INSTITUTION   ", 
         "MOUVEMENT     ", "PUREMENT      ", "NATIONAL      ", "INITIATIVE    ", 
         "ENORMEMENT    ", "RETROUVER     ", "INVESTISSEUR  ", "ACCUEILLIR    ", 
         "PERSPECTIVE   ", "STRATEGIQUE   ", "COMPARAISON   ", "PREFERENCE    ", 
         "PRODUCTEUR    ", "CHIMIQUE      ", "RISQUER       ", 
         "TENDANCE      ", "SPECIALISTE   ", "ATTENTION     ", 
         "SPECIALISEE   ", "FONCTIONNEMENT", "LARGEMENT     ", "BEAUCOUP      ", 
         "GLOBALEMENT   ", "RECUPERER     ", "VIOLENCE      ", "PREVENTION    ", 
         "CONSTATER     ", "CONDUITE      ", "CONSACRER     ", "BENEFICE      ", 
         "ASSURANCE     ", "ASSUREUR      ", "JUSTIFIE      ", "UNIVERSITE    ", 
         "FONDATION     ", "RESPECTER     ", "SPECIALISER   ", "CONCLUSION    ", 
         "NOTATION      "};
        static{
        scan=new java.util.Scanner(System.in);
        scan.useLocale(java.util.Locale.ENGLISH);
        }
        public static double readDouble(){
        double res = scan.nextDouble();
        scan.nextLine();
        return res;
        }
        public static void pause(double n){
        try{
            Thread.sleep((long)(n* 1000));
        }catch(InterruptedException ie){
            throw new RuntimeException();
        }
        }
        public static String readString(){
        String res = scan.nextLine();
        return res;
        }
        public static int readInt(){
        int res = scan.nextInt();
        scan.nextLine();
        return res;
        }
         public static boolean readBoolean(){
        boolean res = scan.nextBoolean();
        scan.nextLine();
        return res;
        }
        public static boolean isDigit(char c){
        return Character.isDigit(c);
        }
        public static char readChar(){
        char res =  scan.nextLine().charAt(0);
           return res;
        }
        public static int auSort(int min, int max){
            return (int) (Math.random()*(max-min+1)+min);
       }
     
        public static char[] motAuSort(){
        return listeMots[(int) (Math.random()*(listeMots.length+1))].toCharArray();
        }
    }
    Quelqu'un saurait-il m'indiquer d'où vient le problème ?

    Merci d'avance pour vos réponses

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    C'est normal, dans le tableau de mot, tous les mots sont paddés à 14 caractères par des espaces à la fin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
              {"MATERIAU      ", "POLITIQUE     ", "FAVORISER     ", "EXTERIEUR     ", 
               "FINANCER      ", "TRADITION     ", "CONSULTER     ", "POSSIBILITE   ",
    C'est sûr que c'est plus facile pour les saisir dans le code comme ça.

    Mais quand tu récupères un mot par motAuSort(), il fait donc 14 caractères (les espaces à la fin sont toujours là).


    Tu peux simplement résoudre le problème en faisant un trim() (qui supprime tous les whitespaces (dont l'espace) devant et derrière) sur le mot avec de le convertir en char[] :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     public static char[] motAuSort(){
       return listeMots[(int) (Math.random()*(listeMots.length+1))].trim().toCharArray();
    }
    Le +1 par contre dans la formule, ça va planter à un moment (ArrayIndexOutOfBoundException)...
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse cependant je ne comprends pas trop a quel endroit je dois rentrer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static char[] motAuSort(){
       return listeMots[(int) (Math.random()*(listeMots.length+1))].trim().toCharArray();
    }
    J'ai essayé dans mon fichier Hangman.java mais ça ne marche pas, j'ai des erreurs.
    Il ne faut pas que je modifie le fichier MOOC ça fait parti de l’exercice.
    Je suis vraiment un gros débutant en JAVA ^^"
    Merci d'avance pour ta réponse

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Fais le trim sur radmWord
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     String radmWord = String.copyValueOf (MOOC.motAuSort()).trim();
    Autre solution, un peu plus compliquée : partir de la fin, boucle tant qu'on trouve une espace, et utliser copyValueOf avec le paramètre offset et count

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char[] motAuSort = MOOC.motAuSort();
    int fin = motAuSort.length();
    while( fin>0 && motAuSort[fin-1]==' ') {
        fin--;
    }
    String radmWord = String.copyValueOf (MOOC.motAuSort(),0, 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.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci !!!!!
    tu es très fort les deux solutions marchent parfaitement !!!
    Il ne me reste plus qu'à le présenter maintenant.
    Tout fonctionne à merveille.

    Merci merci merci !!!

  6. #6
    Candidat au Club Avatar de Nounours_du_33
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Pb avec ton code
    Bonjour,

    Merci beaucoup pour ce code, mais j'ai un problème lors de la compilation de ce dernier.

    Sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     int radmNumber = (int) Math.ceil(Math.random() * radmWord);
    J'ai le message suivant lors de la compilation :
    1 error found:
    File: C:\Users\...\Desktop\Programmes JAVA\Le jeu du Pendu\Hangman2.java [line: 13]
    Error: bad operand types for binary operator '*'
    first type: double
    second type: java.lang.String
    Que faut-il mettre pour ne pas avoir cette erreur ? Je suis aussi un grand débutant...

    Merci de vos réponses.

  7. #7
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    On voit que dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     String radmWord = String.copyValueOf (MOOC.motAuSort());
     
            int radmNumber = (int) Math.ceil(Math.random() * radmWord);
    on cherche à multiplier Math.random() (un double) par un radmWord, un String, ce qui n'a évidemment aucun sens, et est impossible en Java. Vu que radmNumber n'est utilisée nulle part, je crois que tu peux carrément virer cette ligne.

    Attention, rien ne dit que le code publié par @bapt44 compile ou fonctionne en l'état. Et je n'ai fait que répondre à la question posée. Donc, il est possible que tu rencontres d'autres problèmes pour le faire fonctionner.
    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. Autre problème d'ordre dans un jeu de résultat
    Par geckoqc dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/02/2008, 12h50
  2. Réponses: 2
    Dernier message: 31/01/2008, 21h41
  3. Jeu du pendu : problème de boucle
    Par hitman_47 dans le forum Pascal
    Réponses: 31
    Dernier message: 03/01/2008, 19h58
  4. Réponses: 11
    Dernier message: 16/12/2007, 16h33
  5. Problème d'organisation des données dans un jeu de stratégie
    Par khayyam90 dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 15/06/2007, 17h13

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