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

ASP.NET Discussion :

[C#.NET] Random trop rapide !


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 352
    Points : 136
    Points
    136
    Par défaut [C#.NET] Random trop rapide !
    Bonjour,

    J'aimerai créer une fonction me permettant de générer un nombre aléatoirement, cela dit l'execution de l'appli fait que les nombres sont tous identiques !

    voici ma fonction :
    private int Randomize(int min, int max)
    {
    Random rdm1 = new Random(unchecked((int)(DateTime.Now.Ticks)));
    return rdm1.Next(min, ++max);
    }
    Elle reçoit 2 paramètres : Les valeurs min et max qui représentent l'intervalle du nombre à générer aléatoirement.

    J'ai lu dans le MSDN :
    Notes
    Si votre application nécessite différentes séquences de nombres aléatoires, appelez alors ce constructeur à plusieurs reprises avec différentes valeurs initiales. Pour produire une valeur initiale unique, il suffit de la rendre dépendante du temps. Vous pouvez, par exemple, dériver la valeur initiale à partir de l'horloge système.

    Toutefois, si votre application s'exécute sur un ordinateur rapide, l'horloge système risque alors de ne pas avoir le temps de changer entre les appels de ce constructeur ; la valeur initiale risque d'être la même pour différentes instances de Random. Dans ce cas, appliquez un algorithme permettant de différencier la valeur initiale à chaque appel.

    Par exemple, les expressions C# suivantes utilisent une opération de bits complémentaire pour générer deux valeurs initiales différentes même si la valeur de l'heure système est la même.

    Random rdm1 = new Random(unchecked((int)DateTime.Now.Ticks));
    Random rdm2 = new Random(~unchecked((int)DateTime.Now.Ticks));
    Je n'arrive pas à mettre en place un algo me permettant de générer à chaque fois un nombre différent ?!

    Merci

    édit: Quand j'execute le débogeur, les nombres généré sont bien différents, à condition de mettre des points d'arrêts aux bons endroit pour "ralentir" le programme. J'aimerai bien avoir le même résultat qu'avec le débogeur !

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Si tu veux vraiment un bon aléa, tu ferais mieux d'utiliser un générateur cryptographique de nombres aléatoires :

    http://msdn2.microsoft.com/en-us/lib...eprovider.aspx

    Cela t'évitera aussi de devoir créer une instance à chaque itération. Dans l'exemple de la page ci-dessus, la sortie aléatoire est transformée en un Int32. Il faudra juste ajouter un bout de code pour faire en sorte que ta valeur soit entre min et max (normalement, valeur = min + valeur%(max-min))

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par Ticoche
    Je n'arrive pas à mettre en place un algo me permettant de générer à chaque fois un nombre différent ?!
    Ben au lieu de faire une méthode qui crée une instance de Random et qui appelle Next, crée toi-même l'instance et appelle Next directement dans ta boucle. Plus de problème.

    Pas sûr de voir l'intérêt de faire une méthode juste pour ça. Ça te fait créer plein d'objets inutilement et ça pose un problème avec la valeur de départ...

    (accessoirement, ton ++max sent le bug, mais ça dépend de si tu veux juste faire un +1 ou si tu espères que ça va modifier le paramètre)

    Tu aurais un traitement un peu plus complexe à faire dans ta méthode, j'aurais juste suggéré de passer une instance de Random en paramètre au lieu de la créer à l'intérieur. Mais vu qu'il ne resterait plus qu'un appel à Next, autant zapper la méthode...

    (ah, et le unchecked machin truc, tu peux le zapper aussi. c'est pas parce que c'est dans les exemples que c'est super utile :)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 352
    Points : 136
    Points
    136
    Par défaut
    Merci beaucoup pour vos réponses.

    A+

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

Discussions similaires

  1. Net use trop crado
    Par Mr6 dans le forum Modules
    Réponses: 4
    Dernier message: 11/12/2006, 21h07
  2. Traitement trop rapide
    Par Ludog35 dans le forum Access
    Réponses: 2
    Dernier message: 19/06/2006, 14h25
  3. [VBA-E] Liaisons qui ne se mettent pas à jour (macro trop rapide?)
    Par minikisskool dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 21/11/2005, 09h36
  4. Horloge 2x trop rapide!
    Par rgy834 dans le forum Administration système
    Réponses: 6
    Dernier message: 24/10/2005, 21h08
  5. Compte à rebours trop rapide
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2005, 20h57

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