Random sans deux fois la meme valeur

Résolu
laupif
Messages postés
14
Date d'inscription
lundi 28 mai 2007
Statut
Membre
Dernière intervention
7 avril 2010
- 25 sept. 2008 à 17:02
 devilsfire - 8 juin 2018 à 14:45
Je voudrais savoir si il est possible d'obtenir plusieurs chiffres aleatoires sans pouvoir obtenir deux fois le meme chiffre. je m'explique je veux un obtenir les nombres de 1 a 52 dans les desordre. En utilisant la fonction random 52 fois il m'arrive d'obtenir deux fois le meme chiffre je voulais savoir si c'est possible de faire autrement. Merci d'avance.

6 réponses

Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
38
26 sept. 2008 à 08:56
Salut:

Utilises cette snippet:
http://www.codyx.org/snippet_remplir-tableau-avec-nombres-aleatoires-distincts_555.aspx

import java.util.Random;
/**
  * Cette méthode génére une séquence de nombre aléatoires deux à deux distincts.
  * L'avantage de cette méthode utilitaire est le fait qu'elle génére des nombres
  * aléatoires distincts deux à deux d'une façon déterministe.
  * Elle évite le besoin de faire des boucles imbriquées pour teste si un tel entier
  * existe déja dans la séquence.
  *
  * Supposons qu'on fournit la valeur 5 comme paramètre à cette méthode,
  * alors celle-ci peut générée la séquence: [0, 4, 3, 1, 2].
  *
  * @param n - Nombre total des éléments de la séquence à générer.
  * @ return - Retourne la séquence des nombres aléatoires générée.
  */
public static int[] randomize(int n) {
    int[] returnArray = null;
    if (n > 0) {
        returnArray = new int[n];
        for (int index = 0; index < n; ++index) {
            returnArray[index] = index;
        }
        Random random = new Random(System.currentTimeMillis());
        for (int index = 0; index < n; ++index) {
            int j = (int) (random.nextDouble() * (n - index) + index);
            int tmp = returnArray[index];
            returnArray[index] = returnArray[j];
            returnArray[j] = tmp;
        }
    }
    return returnArray;
}
3