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 :

Voulez-vous rejouer ? O/N


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 9
    Points : 11
    Points
    11
    Par défaut Voulez-vous rejouer ? O/N
    Bonjour à tous,

    Décidément, que d'incompréhensions cette semaine !
    J'ai fracturé mon code en fonctions pour que celui-ci soit plus lisible, mais il y a un passage qui quand je le transforme en fonction ne...fonctionne plus

    Je vous mets d'abord la version du main lorsque mon bout de code n'est pas transformé :

    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
     
    public static void main(String[] args) { 
     
          boolean rejouer = true;
          char reponse = ' ';
          while (rejouer == true){
     
            char[]tirage = donnerTirage();
            afficherTirage(tirage);
     
            System.out.print("Proposez votre mot : ");
            char[]mot = Terminal.lireString().toUpperCase().toCharArray();
            afficher(mot);
     
            char[]copie = new char[tirage.length];
            copieCases(tirage, copie, mot);
     
            recapEterreurs(tirage, mot);
     
            char[][]dico = getDictionnaire();
     
            int nbLettres = 0;
            compareCompte(dico, mot, nbLettres);
     
            //là, tout se déroule à merveille//
            while (reponse!='O' && reponse!='N'){
              System.out.println("Voulez-vous rejouer ? O/N");
              reponse = Terminal.lireChar();
              if (reponse=='N'){
                System.out.println("Au revoir !");
                boolean rejouer = false;
              }
            }
          }
        }

    et maintenant le code avec la fonction :

    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
     
    public static void main(String[] args) { 
     
          boolean rejouer = true;
          char reponse = ' ';
          while (rejouer == true){
     
            char[]tirage = donnerTirage();
            afficherTirage(tirage);
     
            System.out.print("Proposez votre mot : ");
            char[]mot = Terminal.lireString().toUpperCase().toCharArray();
            afficher(mot);
     
            char[]copie = new char[tirage.length];
            copieCases(tirage, copie, mot);
     
            recapEterreurs(tirage, mot);
     
            char[][]dico = getDictionnaire();
            int nbLettres = 0;
            compareCompte(dico, mot, nbLettres);
     
            //appel de ma fonction, déclarée en dehors du main//
            nouveau(reponse);
     
          }
        }


    Quelqu'un saurait-il me dire encore une fois ce que je fais de mal ? J'ai tout essayé, j'ai tout bougé dans tous les sens mais rien n'y fait, quand je réponds 'N' il m'affiche "Au revoir !" mais repart ensuite sur le tirage au sort du mot et me refait tout le programme

    Merci pour vos lumières et bonne fin d'année à tous !

  2. #2
    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
    Hello,

    ben, 'faudrait peut-être penser à mettre "rejouer" à "false", tu crois pas ?

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Hello,

    ben, 'faudrait peut-être penser à mettre "rejouer" à "false", tu crois pas ?

    Salut !

    Ben si je le crois, c'est l'une des choses que j'ai essayé de faire.
    Accessoirement, je le mets déjà bien à false quand l'utilisateur saisit 'N' donc je vois pas où est le problème vu que dans mon main on ne lance le tirage que tant que rejouer est true.
    Je ne peux pas vraiment le mettre à false tout au début de mon main, sinon mon programme ne démarre jamais.
    Je ne peux pas non plus le déclarer à false juste avant d'appeler la méthode sinon c'est le 'O' qu'il ne prend plus en compte.
    Je ne peux pas le mettre à false après la méthode sinon le 'O' n'est plus utile non plus.

    Donc où exactement penses-tu qu'il faille mettre rejouer à false ? Je ne doute pas du fait que je rate quelque chose hein...


    J'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static void nouveau (char reponse){
          boolean rejouer = false;
          while (reponse!='O' && reponse!='N'){
          System.out.println("Voulez-vous rejouer ? O/N");
          reponse = Terminal.lireChar();
          if (reponse=='N'){
            System.out.println("Au revoir !");
            rejouer = false;
          }
          rejouer = false;
        }
        }
    et ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public static void nouveau (char reponse){
          boolean rejouer = false;
          while (reponse!='O' && reponse!='N'){
            System.out.println("Voulez-vous rejouer ? O/N");
            reponse = Terminal.lireChar();
            if (reponse=='N'){
              System.out.println("Au revoir !");
              rejouer = false;
          }    
            } 
        }
    En gros j'ai essayé de le mettre un peu partout, rien n'y fait.

    Et encore une fois mon code de base fonctionne sans problème donc pourquoi j'aurais besoin de modifier quelque chose juste parce que je l'appelle maintenant en tant que méthode ? Pour mes autres méthodes déclarées j'ai fonctionné de la même manière et aucune ne m'a posé problème.

    Merci en tout cas de m'avoir répondu.

  4. #4
    Membre éprouvé Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Points : 1 014
    Points
    1 014
    Par défaut

    Ton problème est que Java passe les paramètres d'une fonction par valeur et non par référence.

    Donc la variable qui s'appelle "reponse" au sein de la fonction nouveau() n'est pas la même que celle qui s'appelle "reponse" dans le main.

    Lorsque tu modifie reponse dans ta fonction, ça ne modifie pas la valeur de reponse dans le main.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Drowan Voir le message

    Ton problème est que Java passe les paramètres d'une fonction par valeur et non par référence.

    Donc la variable qui s'appelle "reponse" au sein de la fonction nouveau() n'est pas la même que celle qui s'appelle "reponse" dans le main.

    Lorsque tu modifie reponse dans ta fonction, ça ne modifie pas la valeur de reponse dans le main.

    Merci Drowan !

    Y a tellement de réflexes tout bêtes à avoir

    Problème résolu

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

Discussions similaires

  1. Création de la FAQ SQL !!! (Voulez-vous participer ?)
    Par Maxence HUBICHE dans le forum Langage SQL
    Réponses: 47
    Dernier message: 20/12/2009, 04h52
  2. Comment voulez vous diviser le forum dotnet (part2)
    Par neo.51 dans le forum Evolutions du club
    Réponses: 28
    Dernier message: 15/04/2005, 10h10

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