Random

kyokosan Messages postés 41 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 10 avril 2008 - 20 janv. 2008 à 22:51
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 31 janv. 2008 à 13:32
salut
Je voudrais générer un nombre aléatoire entre 1 et 10, mais j'aimerais que ce nombre ne se génère qu'une seule fois
donc j'aurais 9 nombres différents générés aléatoirement
est ce que quelq'un pourrait m'aider?
merci

18 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
21 janv. 2008 à 07:07
Salut,

Algo classique : remplit une liste avec tes dix nombres.

Lors du premier tirage (entre 0 et 9), tu prends le nombre à la Xième place, et tu retire le chiffre de la liste.
Lors du deuxième tirage (entre 0 et 8), tu prends le nombre à la Xième place, et tu retire le chiffre de la liste.
Lors du troisième tirage (entre 0 et 7)...

Ainsi tu obtiens tes 10 chiffres tirés dans un ordre aléatoire et ils sont tous différents.
______________________________________
DarK Sidious
0
kyokosan Messages postés 41 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 10 avril 2008
21 janv. 2008 à 17:24
salut,


Merci pour ta réponse mais ce n'est pas vraiment ce que je veux


Avec ce que vous m’avez proposez je génère des nombres  d’une manière décroissante alors que moi veux que ça soit aléatoire, exemple


Au premier tour un 3


Au deuxième tour un 10


Au troisième un 5 et ….jusqu’a ce que j’épuise tous les 10 chiffres


Merci


 
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
21 janv. 2008 à 17:49
Hello,

en fait il suffit de prendre le problème à l'envers.
Génére une liste qui contienne tes chiffres de 1 à 10.
Et quand tu le récupère tu fais un
//tu récupère ton int
int index = random.nextInt(list.size())
list.get(index);
//et après tu vire le chiffre vu que tu l as déjà utilisé
list.remove(index);

++ Toinou
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
23 janv. 2008 à 15:27
C'est exactement ce que disait darksidious...

   
0

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

Posez votre question
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 6
23 janv. 2008 à 17:05
Effectivement !
Des fois on a la tete dans le paté et on est pas vraiment attentif aux post :)
0
kyokosan Messages postés 41 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 10 avril 2008
23 janv. 2008 à 20:15
salut



Mais moi je n’ai pas une liste prédéfinie je fais rentrer une valeur et après je l'utiliserais pour choisir des valeurs aléatoires
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 janv. 2008 à 21:14
Salut,

Si tu dois tirer 10 nombres aléatoires entre 1 et 10, je vois pas du tout ce que viens faire le nombre entré par l'utilisateur !

C'est l'algo le plus classique et le plus connu pour tirer tout les nombres d'un ensemble connu de façon aléatoire et unique !
______________________________________
DarK Sidious
0
kyokosan Messages postés 41 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 10 avril 2008
23 janv. 2008 à 21:46
Oui c'était juste un exemple
0
kyokosan Messages postés 41 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 10 avril 2008
26 janv. 2008 à 20:39
Salut



voici une partie de mon code ''ou je
génère un nombre aléatoire entre 0 et nb_req, mais j'aimerais que ce nombre ne se génère qu'une seule fois ", mais mon problème c'est que malgré que je le retire il le régénère <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>





pourriez vous jeter un coup d’œil sur mon code, peut être que je me suis trompée quelque part


 






ArrayList  L=new ArrayList(nb_req);// nb_req  introduit pas l'user
Random h=new Random();
for (int i=0;i<nb_req;i++)
 {L.add(new Integer (i));} // je cré ma liste





 for (int i=0;i<10;i++)
  {int rem=Math.abs(h.nextInt((int)L.size()));
 
System.out.println(rem);//alors là il m'affiche plus qu'une fois l'élément qui est sensé être supprimé
  f[rem]=i+1;
  L.remove(rem);}
merci
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
26 janv. 2008 à 20:58
int rem=Math.abs(h.nextInt((int)L.size()));
tu recuperes un indice dans ton tableau.
il faut faire System.out.println(l.get(rem)); pour avoir la valeur
et ensuite
f[l.get(rem)] = i+1;
L.remove(rem);

Cdt
0
kyokosan Messages postés 41 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 10 avril 2008
26 janv. 2008 à 21:24
mais moi j'ai besoin d'un entier et non pas d'un obj


j'ai fait ça mais c'est incompatible


 f[(int)L.get(rem)]=i+1;
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
26 janv. 2008 à 23:45
Il faut faire un L.get(rem).intValue().
Toutes mes excuses pour cet oubli.

Cdt
0
kyokosan Messages postés 41 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 10 avril 2008
27 janv. 2008 à 00:14
pas grave mais celle aussi ne marche pas
0
kyokosan Messages postés 41 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 10 avril 2008
31 janv. 2008 à 00:45
salut
j'aimerais bien que vous m'aidiez pour rendre un objet extrait d'une liste en un entier que je peux l'tiliser pour le calcul
j'ai essayé avec (int)l.get(rem) et l.get(rem).intValue et ça n'a rien donné

partie du code:

int rem=Math.abs(h.nextInt((int)L.size()));
tu recuperes un indice dans ton tableau.
il faut faire System.out.println(l.get(rem)); pour avoir la valeur
f[l.get(rem)] = i+1;// le l.get(rem) est un objet moi je veux un entier
L.remove(rem);

merci
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
31 janv. 2008 à 09:11
Bonjour.
Normalement
f[l.get(rem).intValue()]  doit fonctionner normalement.
Quel genre d'erreurs as tu ? Erreur de compilation ? Plantage à l'exectution (exception ?) ?

Cdt
0
kyokosan Messages postés 41 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 10 avril 2008
31 janv. 2008 à 13:04
salut
non pas erreur de compilation mais c'est plutot une erreur syntaxique (cannot resolve symbol:methode int Value()in class java.lang.Object.


merci infiniment pour ton aide
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
31 janv. 2008 à 13:32
Ah ok je n'avais pas vu tu n'utilise pas java 6, du coup ta liste n'est pas typée.

Il faut donc faire f[((Integer)l.get(rem)).intValue()]
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
31 janv. 2008 à 13:32
Salut,

Utilise les generics, comme cà plus de problème :

ArrayList L = new ArrayList();

Plutôt que :
ArrayList L = new ArrayList();
Qui t'oblige alors à caster les éléments de ta liste, et qui est bien plus dangeureuse, car tu peux lui ajouter n'importe quel type d'objet !
______________________________________
DarK Sidious
0
Rejoignez-nous