Question sur les nombre aléatoires...

Question sur les nombre aléatoires... - Java - Programmation

Marsh Posté le 12-11-2003 à 15:51:03    

Bonjour,
 
j'ai besoin de généré un certain nombre de nombre entre 0 et n, mais je ne doit pas avoir deux fois le meme
 
comment faire ca ?
 
je pensait a une boucle de Math.random(), mais comment m'assurer que je n'ais pas deux fois le meme nombre ?
 
merci  :hello:

Reply

Marsh Posté le 12-11-2003 à 15:51:03   

Reply

Marsh Posté le 12-11-2003 à 15:51:42    

java.util.Random. Tu fais un nextInt à chaque fois.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 12-11-2003 à 16:44:35    

Taiche a écrit :

java.util.Random. Tu fais un nextInt à chaque fois.


 
heu je définit comment l'interval ? si je veu que des nombres entre 10000 et 20000 ou entre 0 et 50000

Reply

Marsh Posté le 12-11-2003 à 16:45:17    

lis la javadoc


---------------
IVG en france
Reply

Marsh Posté le 12-11-2003 à 16:46:40    

Sdk a écrit :


heu je définit comment l'interval ? si je veu que des nombres entre 10000 et 20000 ou entre 0 et 50000


La Javadoc dit :

Citation :

public int nextInt(int n)
 
    Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive)


Donc pour un truc entre 0 et 50000, tu feras nextInt(50000) et pour un truc entre 10000 et 20000 bin tu feras nextInt(10000) et tu rajouteras 10000 [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 12-11-2003 à 16:46:50    

nextInt
public int nextInt(int n)Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence. The general contract of nextInt is that one int value in the specified range is pseudorandomly generated and returned. All n possible int values are produced with (approximately) equal probability. The method nextInt(int n) is implemented by class Random as follows:  
 
 
je vai lire la doc :D
 
merci
 
 
edit : grillayd, merci  :jap:  :jap:


Message édité par sdk le 12-11-2003 à 16:47:18
Reply

Marsh Posté le 12-11-2003 à 16:47:39    

uriel a écrit :

lis la javadoc  


:jap:


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 12-11-2003 à 16:49:06    


perso je verrais bien un feature du forum forcant a repondre a un questionnaire : "avez vous fais une recherche google / forum /javadoc/msdn ?" :O

Reply

Marsh Posté le 12-11-2003 à 16:49:18    


 
un peu rapide quand même parce que c'est vrai que cette classe pourrait avoir une methode avec un intervalle en argument  [:spamafote]


---------------
IVG en france
Reply

Marsh Posté le 12-11-2003 à 16:51:56    

uriel a écrit :


un peu rapide quand même parce que c'est vrai que cette classe pourrait avoir une methode avec un intervalle en argument  [:spamafote]  


Ouais m'enfin bon, suffit de savoir faire une addition, c'est pas trop la mort :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 12-11-2003 à 16:51:56   

Reply

Marsh Posté le 12-11-2003 à 16:57:30    

De toute façon, la classe Random elle est pas assez aléatoire : elle fait que des grands nombres.
 
c'est bien connu :o


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 12-11-2003 à 16:58:59    

benou a écrit :

De toute façon, la classe Random elle est pas assez aléatoire  


 
Absolument elle est pseudo aleatoire [:aloy]
 
(ouais je sais que tout le monde le sait mais j'ai envie de faire mon viel fly fuckers du mercredi)

Reply

Marsh Posté le 12-11-2003 à 17:13:46    

( c bon ca marche nickel merci les gens )

Reply

Marsh Posté le 12-11-2003 à 17:15:08    

cai la faute à Taiche :o


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 12-11-2003 à 17:15:55    

DarkLord a écrit :

cai la faute à Taiche :o


[:sisicaivrai]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 12-11-2003 à 18:15:10    

Sdk a écrit :

Bonjour,
 
j'ai besoin de généré un certain nombre de nombre entre 0 et n, mais je ne doit pas avoir deux fois le meme
 
comment faire ca ?
 
je pensait a une boucle de Math.random(), mais comment m'assurer que je n'ais pas deux fois le meme nombre ?
 
merci  :hello:  


Vous avez remarqué que vous avez répondu à côté de la question ? (ou alors la question était mal formulée).
 
Parce que Random.nextInt() ne garantit en aucun cas que sur n tirages, on obtiendra des tirages tous différents. Un seul exemple, si tu fais 6 tirages aléatoires de nombres compris entre 1 et 6, tu es pratiquement sûr d'obtenir au moins un des nombres plusieurs fois...
 
Si tu veux une suite de nombres pseudo-aléatoires et, en même temps, la garantie de l'unicité de ces nombres, alors il faut utiliser une méthode différente : tirage de nombre aléatoires en les triant pour être sûrs qu'ils soient tous différents, puis un shuffle() sur la liste des nombres obtenus (voir la classe Arrays ou Collections, je ne sais plus).


Message édité par BifaceMcLeOD le 13-11-2003 à 11:56:37
Reply

Marsh Posté le 12-11-2003 à 18:27:12    

BifaceMcLeOD a écrit :


Vous remarquerez que vous avez répondu à côté de la question ? (ou alors la question était mal formulée).
 
Parce que Random.nextInt() ne garantit en aucun cas que sur n tirages, on obtiendra des tirages tous différents. Un seul exemple, si tu fais 6 tirages aléatoires de nombres compris entre 1 et 6, tu es pratiquement sûr d'obtenir au moins un des nombres plusieurs fois...
 
Si tu veux une suite de nombres pseudo-aléatoires et, en même temps, la garantie de l'unicité de ces nombres, alors il faut utiliser une méthode différente : tirage de nombre aléatoires en les triant pour être sûrs qu'ils soient tous différents, puis un shuffle() sur la liste des nombres obtenus (voir la classe Arrays ou Collections, je ne sais plus).


 
han moi je pensai ke ca le fesai tout seul snif
 
bah y ont tous mal lu alors :)

Reply

Marsh Posté le 12-11-2003 à 18:51:32    

Sdk a écrit :


 
han moi je pensai ke ca le fesai tout seul snif
 
bah y ont tous mal lu alors :)


en effet.
 
bien vu BifaceMcLeOD :jap:


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 12-11-2003 à 22:16:52    

:whistle:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-11-2003 à 00:53:47    

BifaceMcLeOD a écrit :

Un seul exemple, si tu fais 6 tirages aléatoires de nombres compris entre 1 et 6, tu es pratiquement sûr d'obtenir au moins un des nombres plusieurs fois...

faudra m'expliquer comment tu esperes obtenir 6 nombres differents entre 1 et 6 alors  [:atsuko]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-11-2003 à 00:54:46    

the real moins moins a écrit :

faudra m'expliquer comment tu esperes obtenir 6 nombres differents entre 1 et 6 alors  [:atsuko]  


1 2 3 4 5 6 [:dawa]

Reply

Marsh Posté le 13-11-2003 à 00:59:00    

oh putain [:psychokwak]
 
 
 
[:neowen]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-11-2003 à 04:33:08    

Si tu veux faire ce qu'a dit BifaceMcLeOD, je propose la méthode suivante : tu utilises un tableau T de N éléments. Les T[i] contiennent chacun un des nombres que tu veux pouvoir tirer (tous différents donc). Tu tires un nombre aléatoire i entre 0 et N-1, qui te donnes ton premier nombre aléatoire : T[i]. Puis tu place T[N-1] dans T[i]. Tu recommences en tirant un nouveau nombre aléatoire entre 0 et N-2. Et ainsi de suite.
 
Par exemple avec N=3 : T[0] = 0, T[1] = 1, T[2] = 2. Tu tires un nombre entre 0 et 2, par exemple 1. Ton premier nombre et donc T[1], soit 1. Tu place donc 2 (T[2]) dans T[1]. Puis tu tires un nouveau nombre entre 0 et 2. Encore 1 par exemple. Ton deuxième nombre est donc T[1], soit 2.

Reply

Marsh Posté le 13-11-2003 à 11:56:18    

Matafan> Il y a déjà un algorithme performant de mélange aléatoire dans l'API standard...

Reply

Marsh Posté le 13-11-2003 à 12:04:17    

Sdk a écrit :


 
han moi je pensai ke ca le fesai tout seul snif
 
bah y ont tous mal lu alors :)


En fait, ça ne se fait pas tout seul, parce que dans la réalité, les tirages aléatoires ne sont pas ainsi. Comme le montre l'exemple du tirage de dés.
 
C'est d'ailleurs un peu comme cela que des profs de statistiques se la jouent... Ils répartissent leur classe en 2, demandent pour le cours suivant à la moitié des élèves de tirer n fois un dé et de l'écrire sur une feuille, et à l'autre moitié d'imaginer n tirages de dés et de l'écrire sur une feuille. Ces profs prétendent ensuite être capable de deviner quelles suites de tirages sont de véritables tirages de dés et lesquels n'en ont pas, avec au moins 95% de réussite. Et le pire, c'est qu'ils y arrivent...

Reply

Marsh Posté le 24-11-2003 à 23:53:57    

Moi, j'utiliserai Random.nextInt en combinaison avec un HashSet (ou un LinkedHashSet si l'ordre de generation a de l'importance).
 
Tu generes un nombre, tu testes s'il existe deja ou pas dans le HashSet (methode HashSet.contains). S'il y est, tu generes un autre nombre avec nextInt. S'il y est pas, tu l'ajoutes au HashSet (methode HashSet.add) et ainsi de suite jusqu'a ce que tu ais le nombre requis d'element (tu peut obtenir le nombre d'elements avec la methode HashSet.size)
 
Voila


Message édité par scubapro10 le 24-11-2003 à 23:59:21
Reply

Marsh Posté le 25-11-2003 à 01:21:34    


le problèmle étant que si tu veux générer par exemple 99'999 chiffres différents entre 1 et 100'000, ta méthode risque de durer une plombe :/
 
Si tu as pas de chance, elle s'arrêtera jamais ;)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 07-01-2005 à 10:43:21    

Moi j'ai une méthode bon ca vaut ce que ca vaut.
 
Imaginons que tu veuilles 100 nombres différents entre 0 et 1000.
 
Tu crée un tableau a 2 colonnes et 1001 lignes
Dans la première colonne tu mets les entiers de 0 à 1000.
Dans la 2ème colonne tu mets des nombres aléatoires (n'importe quoi, par défaut entre 0 et 1).
 
Ensuite tu trie selon la 2ème colonne.
 
Et tu prend les 100 premiers nombres de la 1ère colonne.
 
Après je te laisse le choix de l'implémentation mais l'algo fonctionne et c'est pas le plus long a calculer...
 
 
PS : oups, j'ai pas vu la date... je lisait le topic "[Taupik fun] La plus grosse honte de votre vie?" page 181 (et oui je lis tout depuis le début) et un lien m'a emmené ici. J'ai répondu sans réfléchir...


Message édité par Ourson Noir le 07-01-2005 à 10:46:38
Reply

Marsh Posté le 07-01-2005 à 10:53:15    

[:atari]
Joli déterrage de topic.
 
Très mauvaise méthode proposée !


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 21-01-2005 à 14:25:54    

sircam a écrit :


Très mauvaise méthode proposée !


 
Peut-tu donner un meilleure méthode stp ?

Reply

Marsh Posté le 21-01-2005 à 14:28:33    

le plus simple c'est de de faire du shuffle sur un tableau :o

Reply

Marsh Posté le 21-01-2005 à 14:40:18    

Oui mais quel est l'algo qui se cache derrière le mot "shuffle" ?
Ca serait pas ce que j'ai écrit plus haut ?


Message édité par Ourson Noir le 21-01-2005 à 14:41:36
Reply

Marsh Posté le 21-01-2005 à 18:21:33    

Ourson Noir a écrit :


PS : oups, j'ai pas vu la date... je lisait le topic "[Taupik fun] La plus grosse honte de votre vie?" page 181 (et oui je lis tout depuis le début) et un lien m'a emmené ici. J'ai répondu sans réfléchir...


:cry:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed