Comment choisir au hasard un élément d'un tableau
Je suis à la recherche d'une solution pour choisir le nombre aléatoire à partir d'un tableau d'entiers.
Par exemple, j'ai un tableau new int[]{1,2,3}
, comment puis-je choisir un nombre au hasard?
Vous devez vous connecter pour publier un commentaire.
generator
est une instance dejava.util.Random
Random()
chaque fois que vous exécutez la fonction: le générateur aléatoire est censé avoir de l'histoire. Si elle ne l'avez pas, il est extrêmement prévisible. Ce n'est pas un problème du tout dans ce cas — mais il doit être mentionné quearray[(int)(System.currentTimeMillis() % array.length)]
est tout aussi bonne que la solution proposée.new Random()
tente de créer une instance qui a un autre graine que précédemment crééRandom
. Votre approche de casser horriblement simplement en appelant la fonction deux fois en peu de temps.gcd(array.length,clockAccuracy)!=1
++seedUniquifier
à l'intérieur, et utilisenanoTime()
au lieu decurrentTimeMillis()
— mais il est toujours parfaitement prévisible.Random
facilementVous pouvez utiliser le générateur Aléatoire de la génération aléatoire d'index et de retour de l'élément à l'index:
Si vous êtes va être un élément aléatoire à plusieurs reprises, vous voulez vous assurer que votre générateur de nombre aléatoire est initialisé qu'une seule fois.
Si vous êtes la cueillette aléatoire les éléments du tableau qui ont besoin d'être imprévisible, vous devez utiliser java.de sécurité.SecureRandom plutôt qu'au Hasard. Qui assure que si quelqu'un le sait depuis quelques pioches, ils n'ont pas un avantage à deviner la prochaine.
Si vous cherchez à choisir un nombre aléatoire à partir d'un tableau d'Objets à l'aide de médicaments génériques, vous pouvez définir une méthode pour le faire (Source Avinash R dans Élément aléatoire de tableau de chaînes):
utilisation
java.util.Random
pour générer un nombre aléatoire entre 0 et la longueur du tableau:random_number
, et ensuite utiliser le nombre aléatoire pour obtenir le nombre entier:array[random_number]
Utiliser le Aléatoire classe:
Vous pouvez également utiliser
Math.random()
retourne undouble
entre0.0
(inclus) au1.0
(exclusif)Multipliant ce avec
array.length
vous donne undouble
entre0.0
(inclus) etarray.length
(exclusif)Casting pour
int
arrondir vers le bas en vous donnant entier et entre0
(inclus) etarray.length-1
(inclus)Puisque vous avez java 8, une autre solution consiste à utiliser le volet de l'API.
Où
1
est la plus faible int généré (inclus) et500
est le plus élevé (exclusif).limit
signifie que votre flux, vous avez une longueur de 500.Aléatoire est de
java.util
paquet.Prendre un coup d'oeil à cette question:
Comment puis-je générer des entiers aléatoires dans une gamme spécifique en Java?
Vous souhaitez générer un nombre aléatoire de 0 à votre entiers de longueur - 1. Alors tout simplement obtenir votre int à partir de votre tableau:
Java a une au Hasard de classe en java.util paquet. En l'utilisant, vous pouvez effectuer les opérations suivantes:
Espérons que cette aide!
Vous pouvez également essayer cette approche..
O(nlogn)
temps de la complexité, faire de la copie de deux fois à l'aide du total de 3 fois plus de mémoire que la table initiale, même si le problème de l'OP demandé à ce sujet peut être résolu avecO(1)
temps de la complexité et deO(1)
de la mémoire...?