Problème de génération de nombre aléatoire

fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008 - 5 déc. 2007 à 13:55
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 5 déc. 2007 à 17:45
Bonjour à tous,

Je voudrais générer dans une boucle deux nombre aléatoire. Voila ce que j'ai fais :

*****************
        While testersolution() = False
            Dim rmd As New Random()
            Dim row As Integer = rmd.Next(0, 300)
            ' Threading.Thread.Sleep(100)
            Dim rmd_1 As New Random()
            Dim col As Integer = rmd_1.Next(0, 300)

            list.Add(row.ToString & "\\\\" & col.ToString)
        End While
*****************

Le problème c'est qu'a chaque itération de la boucle, les valeurs sont toujours identiques !! En effet, je sais que Random se base sur l'horloge et donc vu qu'il s'écoule quelque milliseconde entre deux itérations... ca plante le random.

Comment faire pour contourner le problème ?

Merci à tous

10 réponses

cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
5 déc. 2007 à 14:08
Salut,

Regarde si cela existe toujours dans .net : Rnd

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
5 déc. 2007 à 14:15
Salut oui cela existe mais il genère un nombre en 0 et 1 exclu donc je ne vois pas comment faire pour lui demander de générer un nombre en 0 et 2 (inclus). De plus, n'aurais je pas le meme soucis ?

Merci
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
5 déc. 2007 à 14:28
re,

Je viens de faire un petit essai avec le code ci-dessous, et j'ai bien un nombre différent à chaque click :

Private Sub Command1_Click()

Dim toto As Integer
Dim tata As Integer


toto = Int(100 * Rnd) 'nombre entre 0 et 100
tata = Int(100 * Rnd) 'nombre entre 0 et 100


MsgBox toto
MsgBox tata

End Sub


A+
Exploreur

 Linux a un noyau, Windows un pépin


 
0
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
5 déc. 2007 à 14:33
Normal :) pour cliquer tu mets du temps ^^

Essaye ton code dans une boucle très rapide et tu verras c'est toujours pareil...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
5 déc. 2007 à 15:13
Salut,

Pourquoi créer deux fois le rnd ?

__________
  Kenji
0
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
5 déc. 2007 à 15:15
c'était pour tester mais sans succes, j'ai toujours le meme problème, c'est à cause de la boucle while. si je met un sleep au milieu de la boucle pas de problème mais c'est moche et ca ralentie la boucle pour rien !

Personne n'a de solutions ?
0
Utilisateur anonyme
5 déc. 2007 à 15:25
J'ai fait ceci :
Dim Rnd As New Random()
For i As Integer = 0 To 49
  ListBox1.Items.Add(String.Format("{0} {1}", Rnd.Next(0, 300), Rnd.Next(0, 300)))
Next i, ----
(Coloration syntaxique automatique par Kenji)
Les nombres dans un même couples sont différents à chaque fois.
__________
  Kenji
0
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
5 déc. 2007 à 16:40
Pas chez moi... tu as essayer mon code avec la boucle while ?
0
Utilisateur anonyme
5 déc. 2007 à 16:54
While ou For ..., c'est une boucle.
Mais la boucle n'importe peu. C'est le premier passage qui est important.
Si lors du premier passage, il sont identique, ils le seront fortement pour les passages suivants ; et à l'inverse, si ils sont différents, les autres le sont.

__________
  Kenji
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 déc. 2007 à 17:45
Bonsoir,

mécanisme connu et utilisé pour des tirages rapprochés :

1) Les nombres dans un tableau
2) tirage aléatoire d'un index (et on garde son contenu)
3) on intervertit le dernier item du tableau avec l'item déjà tiré

De cette manière : si le même index est tité 2 fois de suite, son contenu est forcément différent.


Il reste bien évident que :

-  rien n'interdit que le hasard (mais ce sera alors du hasard) fasse qu'au 2ème tirage sorte le dernier index (donc même contenu qu'au 1er tirage
- que le 3ème tirage (si vraiment très rapproché dans le temps du tout 1er) risque alors d'être encore le même index et donc de rétablir le tableau tel qu'il était au tout début

C'est donc à toi de faire en sorte, sur la base de cet exemple de mécanisme, pour que la chose n'arrive pas. Un procédé simple consiiste à utiliser un compteur et à intervertir non avec le dernier index, mais avec celui, qui s'incrémente, correspondant au compteur.

Voilà ... c'est un peu plus compliqué que dit ici, mais facile à "capter" et c'est donc à toi de jouer...
0
Rejoignez-nous