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 :

Générer des noms de façon aléatoire


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Points : 10
    Points
    10
    Par défaut Générer des noms de façon aléatoire
    Bonjour,
    étant débutant en programmation, j'ai travail à faire sur un MasterMind, mais la n'est pas le problème.
    Je voulais savoir pourquoi jDeveloper me cite comme erreur que c'est un état impossible a atteindre.
    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
            while (pion1 == pion2 || pion1 == pion3 || pion1 == pion4 ){
            pion1 = (int) (Math.random() * 8 ) + 1;
            }
            return pion1;
            while (pion2 == pion1 || pion2 == pion3 || pion2 == pion4 ){
            pion2 = (int) (Math.random() * 8 ) + 1;
            }
            return pion2;
            while (pion3 == pion1 || pion3 == pion2 || pion3 == pion4 ){
            pion3 = (int) (Math.random() * 8 ) + 1;
            }
            return pion3;
            while (pion4 == pion1 || pion4 == pion2 || pion4 == pion3 ){
            pion4 = (int) (Math.random() * 8 ) + 1;
            }
            return pion4;
    Comment pourrais-je faire en sorte que cela génère des chiffres différent, et si j'ai commis de grosses fautes ou sont-elles (de syntaxe ou autres )?


    Cordialement MrMichou !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Citation Envoyé par MrMichou Voir le message
    Bonjour,

    Je voulais savoir pourquoi jDeveloper me cite comme erreur que c'est un état impossible a atteindre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            while (pion1 == pion2 || pion1 == pion3 || pion1 == pion4 ){
            pion1 = (int) (Math.random() * 8 ) + 1;
            }
            return pion1;
           ...
    Bonjour,

    return quitte immédiatement une fonction en retournant la valeur qui suit le return. Tout ce qui est donc à la suite d'un return ne sera jamais exécuté. Donc tout ce qui est après "return pion1" ne sera jamais exécuté dans ton code, d'où l'erreur qui t'es remontée par ton IDE.

    J'ai pas bien compris ce que tu cherches à faire avec cet algorithme. Essaie de l'expliquer en français

    Romain.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    Oui, désolé je l'ai fais un peux à la va vite mon explication :s.

    Dans ma méthode je dois générer de façon aléatoire la combinaison de 4 chiffres, mais les 4 chiffres ne doivent pas être semblable.

    Merci pour ton explication rg77140.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Voilà un bout de code qui devrait t'aider :

    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
     
    /**
    * Méthode permettant de generer un nombre different des trois passés en paramètres
    */
    public static int genererNombreDifferent(int valeurExclue1, int valeurExclue2, int valeurExclue3)){
            int nombreAleatoire;
            do{
                    nombreAleatoire = (int) (Math.random() * 8 ) + 1;
            } while (nombreAleatoire== valeurExclue1 || nombreAleatoire== valeurExclue2 || nombreAleatoire == valeurExclue3);
     
            return nombreAleatoire;
    }
     
    // génération des 4 nombres
    pion1 = genererNombreDifferent(pion2,pion3,pion4);
    pion2 = genererNombreDifferent(pion1,pion3,pion4);
    pion3 = genererNombreDifferent(pion1,pion2,pion4);
    pion4 = genererNombreDifferent(pion1,pion2,pion3);
    J'ai pas testé il y a peut-être des petites adaptations...

    Romain.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    Wow , j'aurais jamais penser à utiliser un do while.
    Merci beaucoup de ton aide !!!

  6. #6
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    tu veux créer une liste de N nombres de 1 à X tirés au hasard sans répétition?
    Si X n'est pas trop grand:
    - générer une liste des nombres de 1 à X
    - faire un Collection.shuffle sur cette liste
    - prendre les N premiers éléments
    Il y a plus optimum (avec Random nextInt()), mais cette recette est facile à coder (clin d'oeil à ceux qui connaissent APL )

    PS: lire la littérature sur les algorithmes de MasterMind : il existe un algo extrèmement performant (pas le plus efficace, mais assez proche de l'optimum théorique) qui s'écrit en quelques lignes de code.
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Points : 417
    Points
    417
    Par défaut
    J'ajouterai que cette section de code n'est pas très logique :

    pion1 = genererNombreDifferent(pion2,pion3,pion4);
    pion2 = genererNombreDifferent(pion1,pion3,pion4);
    pion3 = genererNombreDifferent(pion1,pion2,pion4);
    pion4 = genererNombreDifferent(pion1,pion2,pion3);
    Pourquoi pion1 ne pourrait pas être égal à l'ancienne valeur de pion2, puisque pion2 va changer de valeur.

    Une approche correcte serait plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    pion1 = genererNombreDifferent();
    pion2 = genererNombreDifferent(pion1);
    pion3 = genererNombreDifferent(pion1,pion2);
    pion4 = genererNombreDifferent(pion1,pion2,pion3);
    Bien entendu, on voit que dans ce cas, la réponse la plus pertinente est celle de professeur Shadoko qui évite de faire des tours de boucle pour rien et d'écrire une fonction compliquée pour chaque cas, ou d'utiliser l'Ellipse (...) de Java 5.0.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup pour vos réponse !
    @professeur shadoko, je vais regarder pour les algo. même si mon but est d'essayer d'apprendre par moi même, mais cela a l'air intéressant , même si je pense ne pas avoir encore le niveau pour pouvoir dev un mastermind de haut niveau, (Même si cela ne nécessite pas un niveau de pro. ).
    Surtout que pour le moment je ne cherche pas a faire un MasterMind de haut niveau avec un environnement Graphique, bien que j'aimerais .
    Merci beaucoup.
    @Sharcoux, Merci pour ta correction, je n'ai pas encore essayer. Ton raisonnement à l'air logique, j'vais regarder sa de suite.

    Merci beaucoup pour vos réponses !!!
    Ça fait plaisir de recevoir de l'aide !

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

Discussions similaires

  1. [Toutes versions] ALEA.ENTRE.BORNES - Générer des noms, prénoms et dates aléatoires
    Par Philippe Tulliez dans le forum Contribuez
    Réponses: 0
    Dernier message: 26/05/2013, 19h00
  2. Générer des numéros de téléphone aléatoire
    Par Rodrigue dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/10/2012, 23h07
  3. Générer des noms de variables à la volée
    Par Guillaume_Caldera dans le forum Langage
    Réponses: 5
    Dernier message: 27/12/2009, 18h07
  4. Trier des lignes de façon aléatoire
    Par schwinny dans le forum Excel
    Réponses: 3
    Dernier message: 13/06/2008, 09h28
  5. Générer des noms de champs avec des tableaux
    Par MV1908 dans le forum Zend_Form
    Réponses: 2
    Dernier message: 26/05/2008, 16h16

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