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 :

Un pendu en console


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 67
    Points : 21
    Points
    21
    Par défaut Un pendu en console
    Bonjour,

    Je dois faire un pendu en Java, et en console sauf que...je suis pas fan du Java et encore moins des pendu

    Je dois utiliser 4 fonctions, une pour remplacer, une pour la longueur, un qui crée des tirets et une qui vérifie si une lettre se trouve dans une chaine et renvoi la position de la première quelle trouve...

    Depuis vendredi soir (honte à moi) je bloque dessus...j'arrive à un moment ou je peux remplacer les lettres mais elles ne sont pas sauvegardées et il mets impossible de remplacer plusieurs lettres s'il y en a plusieurs...
    Même en parcourant la chaine avec une boucle cette fonction(méthode pour le java ?) ne retourne que la première position de la lettre choisie.
    Comment faire ?

    Merci et bonne journée

    PS : Je n'attends pas de vous une réponse avec un code directement, je voudrais juste des conseils, de l'aide... Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 366
    Points : 1 362
    Points
    1 362
    Par défaut
    Citation Envoyé par JimDraw Voir le message
    j'arrive à un moment ou je peux remplacer les lettres mais elles ne sont pas sauvegardées et il mets impossible de remplacer plusieurs lettres s'il y en a plusieurs...
    Même en parcourant la chaine avec une boucle cette fonction(méthode pour le java ?) ne retourne que la première position de la lettre choisie.
    Comment faire ?
    Pour ce qui est de la représentation de la chaine de caractères, dans ce cas précis, tu utilises un String ou un char[] ? La seconde me parait beaucoup plus adaptée au problème. Et tes algo sont des parcours de tableau, ce qui est plus simple. Cà réglerait surement la question du remplacement de plusieurs lettres.

    Peux tu poster du code ou expliquer ce que tu entends par "sauvegarder"?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 67
    Points : 21
    Points
    21
    Par défaut
    Ce sont des méthodes qui nous ont été donné et je dois donc utiliser des String.

    Je veux dire que lorsque je vais entrer une lettre si elle correspond à une du mot, lorsque je vais rentrer une seconde lettre, la précédente n'apparait pas exemple :

    User / lettre : E

    Mot : E------ (exemple)

    User / lettre : M

    Mot : ---M---

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 366
    Points : 1 362
    Points
    1 362
    Par défaut
    Citation Envoyé par JimDraw Voir le message
    Je veux dire que lorsque je vais entrer une lettre si elle correspond à une du mot, lorsque je vais rentrer une seconde lettre, la précédente n'apparait pas

    Il va falloir poster du code si tu veux de l'aide. A priori, l'idée est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    lancer le jeu
    tant que pas fin du jeu 
       choisir un mot à faire deviner. Soit m ce mot
       String currentValue = " - - - - - - - "
       tant que mot pas trouvé ou nombre d'essais pas accompli 
          lire une entrée
          afficher la nouvelle valeur, par exemple " - - - E - - - "
          currentValue = " - - - E - - - "
          repartir de currentValue pour l'affichage et la résolution

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 67
    Points : 21
    Points
    21
    Par défaut
    Je vais retaper un code rapidement, si cela fonctionne, c'est ok...

    Le vrai gros problème c'est que la méthode fourni pour tester si un caractère se trouve dans une chaine ne retourne uniquement la position du premier caractère et non pas du second voir du troisième s'il y en a un...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 67
    Points : 21
    Points
    21
    Par défaut
    Voici le jeu :
    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
    		Scanner sc = new Scanner(System.in);
    		String secret, c, decouvert;
    		int nbChar, i;
     
    		System.out.println("Le mot : ");
    		secret = sc.nextLine();
    		int longueur = longueur(secret);
    		nbChar = longueur(secret);
    		decouvert = tirets(longueur);
    		System.out.println(decouvert);
     
    		do {
    			System.out.println("La lettre : ");
    			c = sc.nextLine();
    			int present = présent(secret, c);
     
    			if(present >= 0) {
    				decouvert = decouvert + c.charAt(0);
    				System.out.println(decouvert);
    			}
     
    		} while (!decouvert.equals(secret));
    Je sais bien que je me suis trompé quelque part...

  7. #7
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    si tu ne peux pas modifier la fonction présent et si elle renvoie une valeur négative si le caractère n'est pas présent, je te conseillerais de travailler sur une copie du mot secret, et de remplacer les lettres trouvées par un autre signe

    en faisant ainsi, tu peux changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int present = présent(secret, c);
    if(present >= 0) {
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(présent(copie, c) >= 0){
      // remplace le caractère trouvé dans copie
      // dévoile le caractère trouvé dans découvert
    }
    ce qui te permettra changer toutes les occurrences d'un même caractère

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 67
    Points : 21
    Points
    21
    Par défaut
    En utilisant un while, ca me fait un boucle du coup...puisque que présent sera toujours supérieur à 0 dans le cas ou la lettre se trouve bien dans le mot.

    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(present(copie, c) >= 0) {
                 decouvert = remplace(decouvert, present(copie, c), c);
                 System.out.println(decouvert)
    }
    Me fait donc une boucle infini

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 67
    Points : 21
    Points
    21
    Par défaut
    Problème résolu en partie, avec un if plutôt que while, ça fonctionne mais il ne remplace pas la seconde lettre si il y en a déjà une identique

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    Et donc, que peut-on en déduire à propos de la méthode remplace() ?
    Et donc, pourquoi ne la voit-on pas encore ici ?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 67
    Points : 21
    Points
    21
    Par défaut
    Comment ça ?
    J'avais dans l'idée d'utiliser lastIndexOf() mais du coup si il y a trois lettres identiques il y en aura toujours une qui ne sera pas trouvée...

    Maintenant il faut juste que je puisse gérer deux cas : le cas ou l'utilisateur tape plusieurs fois la même lettre, le cas ou dans le mot il y a plusieurs lettres identiques.


    Vous voulez que je montre le code complet ?

  12. #12
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    Tu as mal compris mon message précédent.

    Tu travailles avec une copie du mot secret, dont tu remplaces les lettres au fur et à mesure que tu les trouves par un symbole. Ce qui fait qu'une lettre à une certaine position ne peut être trouvée qu'une fois, la boucle while se terminera donc quand toutes les occurrences auront été trouvées...

    Si tu veux un bout de code pour illustrer, je peux t'en fournir un

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 67
    Points : 21
    Points
    21
    Par défaut
    Effectivement, je veux bien un bout de code.

    Par que le seul problème qu'il y a c'est vraiment le fait de n'avoir uniquement la position de la première lettre si il en a plusieurs identiques

  14. #14
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    Voilà
    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 static void main(String[] args) {
    	String mot = "SECRET";
    	char[] copie = mot.toCharArray();
    	char[] decouvert = "------".toCharArray();
     
    	String input = "E";
    	int index;
    	while ((index = new String(copie).indexOf(input)) >= 0) { // équivalent à ta fonction présent
    		copie[index] = '@'; // ou tout autre symbole
    		decouvert[index] = input.charAt(0);// équivalent à ta fonction remplace
    		System.out.println("Trouvé "+input+" à la position "+index);
    		System.out.println("Copie: "+new String(copie));
    		System.out.println("Découvert: "+new String(decouvert));
    	}
    }
    ce qui donne
    Trouvé E à la position 1
    Copie: S@CRET
    Découvert: -E----
    Trouvé E à la position 4
    Copie: S@CR@T
    Découvert: -E--E-

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 67
    Points : 21
    Points
    21
    Par défaut
    C'est le seul moyen pour permettre d'afficher plusieurs fois la lettre si elle est présente plusieurs fois ?

    Parce que ca nécessite des connaissances qu'on a pas encore vu (bien que j'ai pris un peu d'avance pour les tableaux)

  16. #16
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    hum j'avais pas pensé à ce genre de limitations

    il y a bien sûr d'autres façons, par exemple tu peux
    • parcourir une à une les lettres du mot pour regarder si elles sont égales au caractère recherché
    • utiliser l'index pour réduire le mot jusqu'à ne plus trouver le caractère


    EDIT: en y repensant, en utilisant tes méthodes, la solution précédente devrait fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(present(copie, c) >= 0) {
                 decouvert = remplace(decouvert, present(copie, c), c);
                 copie = remplace(copie, present(copie, c), "@");
                 System.out.println(decouvert)
    }

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 67
    Points : 21
    Points
    21
    Par défaut
    Je suis un peu perdu..C'est bizarre que ce cas (plusieurs fois la même lettre) ne soit pas prévu.

  18. #18
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    Justement je pense que c'est à toi de trouver comment utiliser les fonctions que tu as pour résoudre le problème.

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 67
    Points : 21
    Points
    21
    Par défaut
    Oui certainement...Mais je ne trouve pas C'est le seul truc qui me pose vraiment problème...

    Mais merci pour ton aide en tout cas

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 67
    Points : 21
    Points
    21
    Par défaut
    J'ai pu contorner partiellement le problème en utilisant un lastIndexOf...mais si le nombre de caractère identique est sup a 2...

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

Discussions similaires

  1. Jeu du pendu sur console - problème de boucle
    Par Pif_Paf_Pouf dans le forum Débuter
    Réponses: 4
    Dernier message: 13/10/2014, 16h36
  2. [Kylix] Kylix 3 et Applications console
    Par deniscm dans le forum EDI
    Réponses: 2
    Dernier message: 14/01/2003, 13h37
  3. [Kylix] application console avec kylix 3 ?
    Par Hakim dans le forum EDI
    Réponses: 4
    Dernier message: 15/11/2002, 22h45
  4. Réponses: 3
    Dernier message: 02/09/2002, 18h49
  5. Editeur en mode console
    Par logramme dans le forum C
    Réponses: 5
    Dernier message: 11/06/2002, 13h23

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