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 :

Problème avec la classe 'Random' [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Fonctionnaire
    Inscrit en
    Novembre 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fonctionnaire

    Informations forums :
    Inscription : Novembre 2017
    Messages : 20
    Par défaut Problème avec la classe 'Random'
    Bonjour à tous,

    Je deviens fou depuis ce matin avec ce problème...

    J'ai besoin de pouvoir disposer de plusieurs générateurs pseudo-aléatoires indépendants les uns des autres. J'ai donc créé une classe 'MyRandom', pour pouvoir créer les méthodes dont j'aurai spécifiquement besoin, mais qui repose sur un objet 'System.Random' privé. Voici ci-dessous l'essentiel du code de cette classe (j'ai enlevé les méthodes qui ne rentrent pas dans le problème) : on instancie avec un seed qui va lui-même servir pour initialiser l'objet 'System.Random'. Ensuite, il y a une méthode pour récupérer un entier compris dans un certain range et une méthode pour renvoyer 'x' valeurs différentes au sein d'une liste.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    public class MyRandom
    {
    	public static int nbOfInstances;
     
    	private System.Random rnd;
    	private int instanceIndex;
     
    	public MyRandom(int seed)
    	{
    		rnd = new System.Random(seed);
    		instanceIndex = nbOfInstances;
    		nbOfInstances++;
    	}	
     
    	public int RandInt(int min, int max)
    	{
    		//min <= N <= max
    		return rnd.Next(min, max + 1);		
    	}
     
    	public List<T> ChoicesInList<T>(List<T> list, int number)
    	{
    		var choices = new List<T>();
    		int index = 0;
     
    		while(index < number)
    		{
    			var item = list[RandInt(0, list.Count - 1)];
    			if (!choices.Contains(item))
    			{
    				choices.Add(item);
    				index++;
    			}
    		}
     
    		return choices;
    Mon problème:
    - Je crée un objet 'MyRandom' avec un seed disons de 100.
    - Je génère des entiers : 2, 3, 7, 4
    - J'appelle 'ChoicesInList' sur une liste fixe en demandant 3 valeurs et j'obtiens : "A", "D", "E".

    - Je crée un nouvel objet 'MyRandom' avec le même seed de 100
    - Je génère des entiers : 2, 3, 7, 4
    - J'appelle 'ChoicesInList' sur une liste fixe en demandant 3 valeurs et j'obtiens : "B", "C", "G"...

    Je précise qu'il n'y a aucune ligne de code entre celles où je génère les trois entiers et celle où j'appelle 'ChoicesInList'... C'est comme si appeler 'RandInt' depuis où je suis dans mon code et depuis 'ChoicesInList' était différent... alors que cette dernière appelle aussi 'RandInt' et donc, in fine, System.Random.Next().

    Je suis perdu... Je précise que je fais ça dans un script dans "Unity". Si je lance le programme, que je l'arrête, puis que je le relance, j'obtiens bien la même chose. Mais quand je le lance depuis l'éditeur, ça me donne ce résultat, qui me semble incohérent... Ou alors il y a vraiment un truc que je n'ai pas compris...

    J'ai ajouté un index à chaque objet 'MyRandom' créé afin de m'assurer que c'était bien le même objet que j'initialisais avec le seed, qui me donnait "2, 3, 7, 4" et les 3 valeurs string. Et c'est bien le cas :
    - MyRandom n°0 est initialité avec le seed "100", puis il me sort 2, 3, 7 et 4 puis enfin "A", "D" et "E".
    - MyRandom n° 1 est initialisé avec le seed "100", puis il me sort 2, 3, 7 et 4 puis enfin "B", "C" et "G"....

  2. #2
    Membre averti
    Homme Profil pro
    Fonctionnaire
    Inscrit en
    Novembre 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fonctionnaire

    Informations forums :
    Inscription : Novembre 2017
    Messages : 20
    Par défaut
    Désolé, en fait le problème venait de la liste, qui lors que je relançais le programme avec l'éditeur, ajoutait les valeurs initiales à la suite des précédentes et donc faussait tout...

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

Discussions similaires

  1. [POO] PHP5 : Problème avec les classes
    Par fleur_de_rose dans le forum Langage
    Réponses: 9
    Dernier message: 06/05/2006, 19h09
  2. Problème avec une classe... "without object"
    Par z980x dans le forum C++
    Réponses: 8
    Dernier message: 27/04/2006, 16h00
  3. [PHPMailer] problème avec la classe phpmailer
    Par sansouna24 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 08/04/2006, 16h51
  4. Problème avec la classe Calendar
    Par afrikha dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 30/03/2006, 08h48
  5. Réponses: 9
    Dernier message: 25/09/2005, 16h33

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