Random sans deux fois la meme valeur [Résolu]

Signaler
Messages postés
14
Date d'inscription
lundi 28 mai 2007
Statut
Membre
Dernière intervention
7 avril 2010
-
 devilsfire -
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

Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
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;
}
Messages postés
750
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
23 décembre 2008
19
Bonsoir,
quelle méthode utilises-tu ? Math.random() ? Random ? Le second étant meilleur. Au pire, tu peux créer ton propre algo aléatoire, qui se passerait sur l'un des deux, et qui se souviendrait des résultats obtenus

Bon courage

le monde a des idées : la preuve, c'est qu'il y en a de mauvaises
ne comprends pas tout, mais je parle de tout : c'est ce qui compte
Messages postés
14
Date d'inscription
lundi 28 mai 2007
Statut
Membre
Dernière intervention
7 avril 2010

j'utilise Random. Le probleme avec mon propre algoritm est que cette fonction random doit melanger des cartes donc si j'utilise mon propre algo cela ne risque pas de faire un melange semblable a tout les coups ?
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
23
Salut,

Tu mets tes 52 cartes dans une liste. Ensuite tu prends un nombre au hasard entre 0 et 51 et tu enlèves la carte correspondante de la liste, puis tu recommences avec un nombre entre 0 et 50 etc etc...
Sinon pour une jeu de carte sur calculatrice que j'avais fait, je prenais deux nombres entre 1 et 52, par exemple (17 et 24) et j'inversais les deux cartes, je recommençais plusieurs fois jusqu'à ce que le tas soit mélangé.

Je préfère quand même la première solution.
Messages postés
14
Date d'inscription
lundi 28 mai 2007
Statut
Membre
Dernière intervention
7 avril 2010

Actuellement j'ai un system ou les cartes sont inverser de maniere defini, c'est le nombre de fois que l'on va changer l'ordre des cartes qui va etre aleatoire. Je vous remercie de vos reponses.
Bonjour je voudrait la meme chose mais sur python pouvez vous m'aider?