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 :

génération de valeur pour dé


Sujet :

Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 20
    Par défaut génération de valeur pour dé
    Bonjour,

    Dans mon projet de jeu, on me demande de faire rouler un dé à 6 faces, qui retourne soit une valeur Sushi, Fishbone, Red_Chopstick ou Blue_Chopstick.

    On me demande donc dans la classe Dice de créer une méthode roll(), qui ne retourne rien (void).

    J'ai fais pour cela deux méthode private (int diceGet() et DiceValue convert(int nb),une qui lance un dé à 6 faces (un nombre aléatoire entre 1 et 6), et une autre méthode qui retourne la valeur (Sushi, Fishbone, etc..) selon le int reçu en paramètre.

    Ma méthode roll(), fait appelle à ces deux méthodes.

    Les méthodes private fonctionnent très bien lors des tests, mais lorsque je veux faire appel à roll(), rien ne change, j'ai toujours la valeur par défaut du dé.
    Est-ce que quelqu'un peut me dire ce qui cloche dans mon code? Dans la méthode main en fin de classe, j'ai fais un test qui utilise les deux méthodes private pour générer aléatoirement 50 dés, cela marche parfaitement. Quand je rentre ce code dans roll(), rien ne change (avec getValue() pour récupérer la valeur).
    Merci.


    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    public class Dice {
     
        /**
         * Value display of dice. This value can not be change by the user.
         *
         * @see getValue
         */
        private DiceValue value;
     
        /**
         * The constructor initialize the dice with a value(these value is a
         * choice). The value is initialized with Sushi.
         */
        public Dice() {
            this.value=DiceValue.SUSHI;
        }
     
        /**
         * This method give the value of dice.
         *
         * @return the value display of dice
         */
        public DiceValue getValue() {
            return value;
        }
     
        /**
         * This method throw a dice.
         */
        public void roll() {
            this.convert(this.diceGet());
        }
     
        /**
         * This method display a string.
         *
         * @return a display of the value
         */
        @Override
        public String toString() {
            return "" + getValue();
        }
    //=============================================================================
        //Mes méthodes privées
     
        //Cette méthode lance un dé à 6 faces et retourne un entier
        private int diceGet() {
     
            return 1+ (int) (Math.random()*(6-1+1));
     
        }
     
        /*Cette méthode reçoit un entier et la convertie une valeur DiceValue 
          *corresponante.
         */
        private DiceValue convert(int nb) {
            DiceValue displayVal = DiceValue.SUSHI;
     
            switch (nb) {
                case 1:
                case 2:
                    displayVal = DiceValue.SUSHI;
                    break;
                case 3:
                case 4:
                    displayVal = DiceValue.FISHBONE;
                    break;
                case 5:
                    displayVal = DiceValue.BLUE_CHOPSTICK;
                    break;
                case 6:
                    displayVal = DiceValue.RED_CHOPSTICK;
                    break;
                default:
                    System.out.println("ERROR");
            }
            return displayVal;
        }
     
    //==============================================================================    
    //Cette partie est privée et sert à tester les méthodes privées
        public static void main(String[] args) {
            Dice dé = new Dice();
            for (int i = 0; i < 50; i++) {
                System.out.println(dé.convert(dé.diceGet()));
            }
     
        }
    }

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    ta méthode roll() ne change pas la valeur initiale "private DiceValue value"
    elle se contente d'utiliser convert qui converti dans displayVal
    ton code est trop dispersé ...

    essaye plus simple
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 20
    Par défaut
    Bonjour Népomucène,

    Finalement j'ai résolu le problème, j'avais oublié d'affecter la valeur de DiceValue dans le roll(). maintenant ça marche bien.

    Qu'est ce que tu veux dire par code trop dispersé, qu'il n'est pas nécessaire de faire les deux méthodes private?

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Oui, essaye de réduire au maximum (small is beautifull) !
    A moins que cela soit une exigence de formalisation de ton projet.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

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

Discussions similaires

  1. Génération automatique de valeur pour un champ clé de substitution
    Par gaoussou dans le forum Développement de jobs
    Réponses: 6
    Dernier message: 15/03/2011, 18h20
  2. Décomposer une valeur pour en retirer les octets ?
    Par AsmCode dans le forum Algorithmes et structures de données
    Réponses: 34
    Dernier message: 26/07/2005, 19h01
  3. Réponses: 2
    Dernier message: 17/06/2005, 13h38
  4. Regroupement de valeur pour une date
    Par Erakis dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/06/2005, 21h00
  5. [Lomboz] Génération de code pour EJB
    Par paikan dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/07/2003, 14h28

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