7
votes

Android - générer des nombres aléatoires sans répétition

Quelqu'un peut-il me dire comment générer des nombres aléatoires sans répétition Exemple

aléatoire (10) devrait (mai) renvoyer 3,4,2,1,7,6,5,8,9,10 sans répétition

merci


4 Réponses :


27
votes

Je suggérerais d'ajouter les chiffres à un arraylist , puis utilisez collections.shuffle () pour randomiser leur commande. Quelque chose comme ceci: xxx


2 commentaires

aimé! Une question, si j'exécute une collection.shuffle deux fois ou trois fois fournira-t-il un ordre différent?


Je suis à peu près sûr que ça va. Je ne peux pas trouver une raison pour laquelle cela ne devrait pas. Assez facile pour vérifier cependant, hein? ;)



4
votes

Créez une liste des nombres générés lorsque votre numéro nouvellement généré est déjà dans cette liste, vous établissez un nouveau nombre aléatoire.

Random rng = new Random(); // Ideally just create one instance globally
List<Integer> generated = new ArrayList<Integer>();
for (int i = 0; i < numbersNeeded; i++)
{
    while(true)
    {
        Integer next = rng.nextInt(max) + 1;
        if (!generated.contains(next))
        {
            // Done for this iteration
            generated.add(next);
            break;
        }
    }
}


1 commentaires

Malheureusement, cette méthode ne va pas très bien



-2
votes

S'il n'y a que quelques numéros, moins de 100 ans, je pense que je pense que la solution pourrait créer une matrice booléenne et une fois que vous avez un numéro, définissez la position de la matrice sur TRUE. Je ne pense pas qu'il faut beaucoup de temps avant que tous les chiffres apparaissent. J'espère que ça vous aide!

Cheer!


0 commentaires

2
votes

Mes deux cents xxx


1 commentaires

J'aime le Sublist () Amélioration de cette solution - idéal pour faire face à une main de cartes d'un pont