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

Langage Java Discussion :

[débutant] Creer de l'aléatoire !


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut [débutant] Creer de l'aléatoire !
    Bonsoir tout le monde !!!

    je voudrais créer un vecteur aléatoire de couleurs ! j'ai utilisé pour ceci le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      for(int p=0; p<4; p++) {
            Random alea=new Random();
            int n=alea.nextInt(5);
            proposition.addElement(V.getPions().elementAt(n));
        }
    cependant quand j'affiche ce que ça donne j'obtiens : vert vert vert vert ou rose rose rose rose

    pas très aléatoire tout ça !!! sachant que j'ai 8 couleurs disponible !

    Comment faire pour faire du vrai aléatoire ?

    merci. Bonne soirée

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    On pourrait avoir le code complet ?
    Afin de voir ce qui cloche...
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    bien sur !

    Voici mes 4 classes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package aleatoire;
     
    public class GenererCouleurs {
     
    String couleur;
     
     public GenererCouleurs(String nom) {
         couleur=nom;
     }
     
     public String getCouleurs(){
         return couleur;
     }
    }

    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
    package aleatoire;
    import java.util.*;
     
     
    public class GenererPions {
     
    Vector pions = new Vector();
     
    // creation du vecteur pions
     
    public GenererPions() {
     
        pions.addElement(new GenererCouleurs("blanc"));
        pions.addElement(new GenererCouleurs("rouge"));
        pions.addElement(new GenererCouleurs("vert"));
        pions.addElement(new GenererCouleurs("bleu"));
        pions.addElement(new GenererCouleurs("rose"));
        pions.addElement(new GenererCouleurs("orange"));
        pions.addElement(new GenererCouleurs("jaune"));
        pions.addElement(new GenererCouleurs("violet"));
     }
     
     public Vector getPions(){
         return pions;
     }
    }

    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
    package aleatoire;
    import java.util.*;
     
     
    public class GenererSolution {
     
    Vector sol=new Vector(); // creation du vecteur solution
    GenererPions V=new GenererPions();// On importe le vecteur liste de pions
     
    public GenererSolution() {
     
        for(int i=1; i<=4; i++) {
            Random alea=new Random();
            int n=alea.nextInt(5);
            sol.addElement((GenererCouleurs)(V.getPions().elementAt(n)));
        }
    }
     
    public Vector getSolution() {
      return sol;
     }    
    }

    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
    package aleatoire;
     
     
    public class Principale {
     
        public static void main(String[] args) {
            Principale principale = new Principale();
     
            GenererSolution essai=new GenererSolution();
     
            for (int i=0; i<((int)(essai.getSolution().size())); i++) {
                System.out.print(((GenererCouleurs)essai.getSolution().elementAt(i)).getCouleurs()+" ");
            }
        }
    }

    et voici ce que j'obtiens que je lance le prog :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    blanc blanc blanc blanc
    etc...

    Voilà. En espérant que ça vous aide plus.

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 885
    Points : 1 320
    Points
    1 320
    Par défaut
    Salut,

    à première vue :

    Ramdom est un générateur de nombres pseudo-aléatoires, enfin je crois.
    Logiquement tu devrais ne le créer (et donc initialiser cette suite de nombres) q'une seule fois, et non à chaque itération dans ta boucle for
    *graou* et même *graou*, ou encore *graou*

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    j'ai changé la place de du random comme tu m'as dis (je l'ai mis juste avant le for) :

    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
    package aleatoire;
    import java.util.*;
     
    public class GenererSolution {
     
    Vector sol=new Vector(); // creation du vecteur solution
    GenererPions V=new GenererPions();// On importe le vecteur liste de pions
     
    public GenererSolution() {
     
        Random alea=new Random();
     
        for(int i=1; i<=4; i++) {
     
            int n=alea.nextInt(5);
            sol.addElement((GenererCouleurs)(V.getPions().elementAt(n)));
        }
    }
     
    public Vector getSolution() {
      return sol;
     }    
    }
    et voici ce que j'obtiens maintenant comme résultat :

    Est ce qu'il est possible de faire mieux ou pas ? il y a quand même 2 fois la même couleur.

    En tout cas merci beaucoup ! c'est déjà nettement mieux

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 885
    Points : 1 320
    Points
    1 320
    Par défaut
    Re,

    sagissant d'une suite (pseudo ou pas) aléatoire, il y a toujours un risque pour que tu tombes X fois sur le même élément, parmis Y tirages. C'est le hasard

    Parcontre :

    ==> si tu veux bricoler / t'amuser, tu peux toujours créer ta propre classe dérivant de Random, dont la méthode nextInt (et éventuellement les autres) serait modifiée pour ne jamais sortir X fois le même nombre sur Y tirages (par exemple jamais 2 fois le même nombre sur 3 tirages consécutifs).
    Le principe :
    - tu retiens les Y derniers tirages (ce seront des attributs de ta classe);
    - à chaque tirage, tu regardes si le tirage fait partie des Y derniers tirages :
    ---- S'il en fait partie, tu relances un tirage jusqu'à ce que tu tombes sur un tirage satisfaisant.
    ---- Si tu tombes sur un tirage ne faisant pas partie des Y derniers tirages, c'est lui que tu renvois, et tu mets à jour ta liste des Y derniers tirages.
    That's all


    ==> tu peux te documenter sur la classe java.security.SecureRandom, qui hérite de java.util.Random. Extrait de la javadoc (lien vers une version CHM) :
    This class provides a cryptographically strong random number generator (RNG). Many implementations are in the form of a pseudo-random number generator (PRNG), which means they use a deterministic algorithm to produce a pseudo-random sequence from a true random seed. Other implementations may produce true random numbers and yet others may use a combination of both techniques.

    A cryptographically strong random number minimally complies with the statistical random number generator tests specified in FIPS 140-2, Security Requirements for Cryptographic Modules, section 4.9.1. Additionally, SecureRandom must produce non-deterministic output and therefore it is required that the seed material be unpredictable and that output of SecureRandom be cryptographically strong sequences as described in RFC 1750: Randomness Recommendations for Security.

    Like other algorithm-based classes in Java Security, SecureRandom provides implementation-independent algorithms, whereby a caller (application code) requests a particular RNG algorithm and is handed back a SecureRandom object for that algorithm. It is also possible, if desired, to request a particular algorithm from a particular provider. See the getInstance methods.
    (...)
    Des fois que.


    ==> sinon il existe peut être des bibliothèques répondant à tes besoins, une bibliothèque proposant la génération de suites aléatoires régies par certaines règles.
    Mais bon là heuuuu... j'ai piscine.

    Bonne soirée.
    *graou* et même *graou*, ou encore *graou*

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

Discussions similaires

  1. [Débutant] Matrice de booléens aléatoires
    Par mik-182 dans le forum LabVIEW
    Réponses: 1
    Dernier message: 29/07/2009, 13h19
  2. [Débutante] Atteindre une ligne aléatoire dans un tableau
    Par rosanne dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 29/10/2007, 13h05
  3. Réponses: 15
    Dernier message: 20/06/2007, 10h21
  4. [Débutant] creer une base de données
    Par abbd dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/02/2007, 01h10

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