Utilisation simplifiée du hasard en .net

Soyez le premier à donner votre avis sur cette source.

Snippet vu 19 923 fois - Téléchargée 31 fois

Contenu du snippet

Classe permettant de générer certaines valeurs de manière aléatoire

Calcul un nombre aléatoire entre 0 et Max
> int RandomWithMax(int max)

Calcul un nombre aléatoire entre Min et 0
> int RandomWithMin(int min)

Calcul un nombre aléatoire entre StartVal et StartVal+etendue
> int RandomWithLength(int startVal, int etendue)

Calcul un nombre aléatoire entre Min et Max
> int RandomMinMax(int min, int max)

Calcul une valeur aléatoire entre true et false
> bool RandomBool()

Source / Exemple :


using System;

namespace UtilityLib
{
    /// <summary>
    /// Classe permettant de générer certaines valeurs de manière aléatoire
    /// </summary>
    public static class Hasard
    {
        // Objet utilisé pour le random
        private static Random m_Random = new Random();

        /// <summary>
        /// Calcul un nombre aléatoire entre 0 et Max
        /// </summary>
        /// <param name="max">Maximum que peut atteindre le random</param>
        /// <returns>Retourne un nombre aléatoire entre 0 et Max, ou bien "max" si max n'est pas plus grand que 0</returns>
        public static int RandomWithMax(int max)
        {
            return max > 0 ? Hasard.m_Random.Next(max + 1) : max;
        }

        /// <summary>
        /// Calcul un nombre aléatoire entre Min et 0
        /// </summary>
        /// <param name="max">Minimum que peut atteindre le random (negatif)</param>
        /// <returns>Retourne un nombre aléatoire entre Min et 0, ou bien Min si min n'est pas plus petit que 0</returns>
        public static int RandomWithMin(int min)
        {
            return min < 0 ? -Hasard.m_Random.Next(-min + 1) : min;
        }

        /// <summary>
        /// Calcul un nombre aléatoire entre StartVal et StartVal+etendue
        /// </summary>
        /// <param name="startVal">Valeur de départ, l'une des bornes du random</param>
        /// <param name="etendue">Écart positif ou négatif entre les 2 bornes du random</param>
        /// <returns>Retourne un nombre aléatoire entre Min et Max</returns>
        public static int RandomWithLength(int startVal, int etendue)
        {
            if (etendue == 0)
                return etendue;
            else
                return startVal + etendue > 0 ? Hasard.m_Random.Next(etendue) : -Hasard.m_Random.Next(-etendue);
        }

        /// <summary>
        /// Calcul un nombre aléatoire entre Min et Max
        /// </summary>
        /// <param name="min">Borne inférieure du random</param>
        /// <param name="max">Borne supérieure du random</param>
        /// <returns>Retourne un nombre aléatoire entre Min et Max</returns>
        public static int RandomMinMax(int min, int max)
        {
            if (min == max)
                return min;
            int theMin = Math.Min(min, max);
            int theMax = Math.Max(min, max);
            return min + Hasard.m_Random.Next((max - min) + 1);
        }

        /// <summary>
        /// Calcul une valeur aléatoire entre true et false
        /// </summary>
        /// <returns>Retourne aléatoirement true ou false</returns>
        public static bool RandomBool()
        {
            return Hasard.m_Random.Next(2) == 0;
        }
    }
}

Conclusion :


Tout est static, il suffit d'avoir la classe au sein du projet.

A voir également

Ajouter un commentaire Commentaires
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Rrominet : Ca reste du pseudo-aléatoire

Voir aussi RNGCryptoServiceProvider (http://msdn2.microsoft.com/fr-fr/library/system.security.cryptography.rngcryptoserviceprovider(VS.80).aspx)
Messages postés
133
Date d'inscription
lundi 26 janvier 2009
Statut
Membre
Dernière intervention
24 novembre 2014

Je ne connaissais pas l'objet Random, mais il semble générer un nombre aléatoire correct (pas comme en C).

Merci pour cette petite classe qui fait gagner du temps :-)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.