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

C# Discussion :

[C#]Random


Sujet :

C#

  1. #1
    Inscrit Avatar de bilb0t
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    378
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 378
    Points : 283
    Points
    283
    Par défaut [C#]Random
    Bonjour, j'ai créé une classe qui initialise 4 variables aléatoirement.
    soit:
    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
    class c
    {
      public int i;
      public int j;
      public int k;
      public int l;
     
      public c()
      {
        Random rnd = new Random(unchecked((int)DateTime.Now.Ticks));
        i = rnd.Next(1,100);
        j = rnd.Next(1,100);
        k = rnd.Next(1,100);
        l = rnd.Next(1,100);
      }
    }
    ça marche bien et les 4 valeurs sont différentes.
    Le problème c'est que si je génère 4 instances de ma classe, les valeurs i,j,k,l sont les mêmes !
    soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    c[] tabC = new c[4];
    for(int i=0;i<4;i++)
    {
      tab[i] = new c();
    }
    //tab[0].i == tab[1].i == tab[2].i ...
    Quelqu'un sait comment je pourrais générer X instances de ma classe avec des nombres aléatoires différents ?

    Merci.

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Bonjour,

    Je te conseille de générer ton objet Random en amont, et de le rendre accessible ( en static par exemple ) ou de le passer au constructeur de ta classe, ainsi, seul un objet Random existera pour ton application, et à chaque next, un nouvel entier sera généré.
    K

  3. #3
    Membre actif Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Points : 272
    Points
    272
    Par défaut
    Ca peut paraître une solution "de fortune" mais une autre solution serait d'incrémenter un nombre à chaque fois que ton constructeur est appelé ( une variable static dans la classe c ). Ici ça donnerait par exemple :
    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
    class c
    {
      public int i;
      public int j;
      public int k;
      public int l;
      private static int randomBase = 1;
     
      public c()
      {
      	Random rnd = 
      		new Random(unchecked((int)(DateTime.Now.Ticks) * randomBase));
        i = rnd.Next(1,100);
        j = rnd.Next(1,100);
        k = rnd.Next(1,100);
        l = rnd.Next(1,100);
        randomBase++;
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    c[] tab = new c[4];
     
    for(int i=0;i<4;i++)
    {
    	tab[i] = new c();
    	Console.WriteLine(tab[i].i);
    	Console.WriteLine(tab[i].j);
    	Console.WriteLine(tab[i].k);
    	Console.WriteLine(tab[i].l);
    }
    En tout cas chez moi ça marche... reste à savoir si ça peut s'intégrer dans ton appli

    En espérant t'aider,
    DeusXL.

  4. #4
    Inscrit Avatar de bilb0t
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    378
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 378
    Points : 283
    Points
    283
    Par défaut
    Citation Envoyé par KiLVaiDeN
    Bonjour,

    Je te conseille de générer ton objet Random en amont, et de le rendre accessible ( en static par exemple ) ou de le passer au constructeur de ta classe, ainsi, seul un objet Random existera pour ton application, et à chaque next, un nouvel entier sera généré.
    Merci c'est ce que j'ai fait et ça marche d'enfer.
    soit:
    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
    class c
    {
      public int i;
      public int j;
      public int k;
      public int l;
      public static Random rnd= new Random(unchecked((int)(DateTime.Now.Ticks));
     
      public c()
      {
        i = c.rnd.Next(1,100);
        j = c.rnd.Next(1,100);
        k = c.rnd.Next(1,100);
        l = c.rnd.Next(1,100);
      }
    }

  5. #5
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Cool que ça marche
    Petit conseil : as-tu une Classe de type "Utilitaire" ? Je m'explique; Dans mes différents projets, j'ai trouvé ça très pratique de créer une classe utilitaire possédant des fonctions à partager dans tous les modules de l'application; Cette classe Utilitaire serait un candidat idéal pour une méthode static int getNextRandomInt(int startAt, int endAt) par exemple, qui du coup éviterait d'avoir un attribut random dans ta classe C alors que ça n'est pas forcément justifié par ton modèle.

    De plus, une classe Utilitaire bien faite, pourra être réutilisée pour tes prochains projets

    A+ bon courage
    K

  6. #6
    Inscrit Avatar de bilb0t
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    378
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 378
    Points : 283
    Points
    283
    Par défaut
    Pas bête du tout. Meric.

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

Discussions similaires

  1. Fonction Random en Assembleur
    Par chidi dans le forum Assembleur
    Réponses: 5
    Dernier message: 21/05/2004, 10h16
  2. Script assez difficile avec random
    Par LFC dans le forum Requêtes
    Réponses: 6
    Dernier message: 01/08/2003, 18h02
  3. [langage] random sur liste ou tableau
    Par martijan dans le forum Langage
    Réponses: 2
    Dernier message: 15/07/2003, 14h47
  4. [VB6] : pour faire un Randomize sous vb... merci
    Par delnic dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/01/2003, 15h49
  5. Random en Assembleur
    Par funx dans le forum Assembleur
    Réponses: 9
    Dernier message: 02/09/2002, 17h05

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