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

laupif 14 Messages postés lundi 28 mai 2007Date d'inscription 7 avril 2010 Dernière intervention - 25 sept. 2008 à 17:02 - Dernière réponse :  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.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 26 sept. 2008 à 08:56
3
Merci
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;
}

Merci Ombitious_Developper 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Ombitious_Developper
indiana_jules 750 Messages postés mardi 9 mars 2004Date d'inscription 23 décembre 2008 Dernière intervention - 25 sept. 2008 à 17:51
0
Merci
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
Commenter la réponse de indiana_jules
laupif 14 Messages postés lundi 28 mai 2007Date d'inscription 7 avril 2010 Dernière intervention - 25 sept. 2008 à 18:09
0
Merci
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 ?
Commenter la réponse de laupif
cs_jojolemariole 519 Messages postés mercredi 21 mars 2007Date d'inscription 19 décembre 2016 Dernière intervention - 25 sept. 2008 à 20:42
0
Merci
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.
Commenter la réponse de cs_jojolemariole
laupif 14 Messages postés lundi 28 mai 2007Date d'inscription 7 avril 2010 Dernière intervention - 26 sept. 2008 à 15:29
0
Merci
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.
Commenter la réponse de laupif
devilsfire - 8 juin 2018 à 14:45
0
Merci
Bonjour je voudrait la meme chose mais sur python pouvez vous m'aider?
Commenter la réponse de devilsfire

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.