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.
Mon problème:
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;
- 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"....![]()
Partager