Salut
2 petites méthodes. je sais pas laquelle est la + rapide
la 2ème utilise le Vector de java.util donc c'est peut-être un peu plus lourd
int[] liste = new int[78];//liste des 78 nombres int[] listeAleat = new int[78];//liste mélangée int[] liste2;//liste intermédiaire for (int i=0; i<78; i++) liste[i]=i+1; for (int i=0; i<78; i++) { int n = (int)(Math.random()*(78-i)+1)-1; listeAleat[i] = liste[n]; liste2 = new int[liste.length-1]; for (int j=0; j<n; j++) { liste2[j] = liste[j]; } for (int j=n; j<liste2.length; j++) { liste2[j] = liste[j+1]; } liste = liste2; } for (int i=0; i<78; i++) { System.out.print(listeAleat[i]+" "); }
|
et la 2ème :
Vector liste = new Vector(); int[] listeAleat = new int[78]; for (int i=0; i<78; i++) liste.add(new Integer(i+1)); for (int i=0; i<78; i++) { int n = (int)(Math.random()*(78-i)+1)-1; listeAleat[i] = ((Integer) liste.elementAt(n)).intValue(); liste.removeElementAt(n); } for (int i=0; i<78; i++) { System.out.print(listeAleat[i]+" "); }
|
DOBELIOU
-------------------------------
Réponse au message :
-------------------------------
> Salut,
>
> J'aimerais pouvoir générer un nombre aléatoire parmis une liste.
>
> Je prends un nombre aléatoire entre 1 et 78 avec (int)(Math.random() *78 + 1) ;
> Ensuite, j'aimerais que ce nombre disparaisse des possibilité. Par exemple si j'ai recu 54, le prochain nombre généré doit être entre 1 et 78 SAUF 54. Je doit générer absolument les 78 chiffres, seule l'ordre doit etre aléatoire.
>
> J'ai fait un petit test. Si le nombre est pris, je lui mets une variable à false s'il est libre true.
> Et je génère un nombre aléatoire dans un do{} while tant que la variable relative au nombre = false .
>
> Seul problème plus je génère de chiffres, plus les possibilités sont restreinte alors que la fonction continue avec des nombres de 1 à 78. Resultat j'arrive à la fin à une boucle quasi-infinie.
>
> Si qqun a une solution je suis preneur :-)