for(int i = 0; i < emojiCnt; i++){ Random rand = new Random(1000); int randNum = rand.nextInt((3) + 1); switch (randNum){ case 1: //Code case 2: //Code case 3: //Code default: //Code } randNum = rand.nextInt((10) + 1); } Every time I run the code, it gives the same result and is not random? I reassign randNum so that it will go to a random number but it doesn't seem to change?
3 Réponses :
Vous semez le rng avec une constante en appelant Un commentaire sur le hasard et la programmation: p>
sans générateur d'entropie externe, un ordinateur n'est généralement pas capable de générer une véritable aléatoire. Ainsi, les générateurs de nombres aléatoires fonctionnent en utilisant une graine intérieure pour générer une séquence pseudo-aléatoire. La séquence satisfait normalement toutes les conditions attendues par une séquence vraiment aléatoire, mais est déterministe une fois que la graine est connue. Plus d'informations sont disponibles sur le Article Wikipedia sur les générateurs de nombres aléatoires . P> ... = nouveau aléatoire (1000); code>
. Avec la même graine, on obtiendra toujours la même séquence de "nombres aléatoires". Ne pas graine ( ... = nouveau aléatoire (); code>), et les valeurs doivent être "aléatoires". P>
Beaucoup de réponses dans le duplicata sont un peu plus détaillées
Si vous voulez des valeurs différentes pour chaque exécution, utilisez Rand Rand = Nouveauté aléatoire (1000); code> indique à Java de créer un aléatoire, basé sur la graine initiale de 1000. Cela se traduit par des résultats aléatoires, mais toujours reproductables. P>
Rand Rand = nouveau aléatoire (); code> à la place. P>
Essayez d'utiliser ce code pour obtenir des numéros aléatoires: Ce code vous apportera des valeurs aléatoires comprises entre 0 et 1000 P> P>
Alors pourquoi exactement le hasard n'a-t-il pas besoin d'une graine?
Parce que vous définissez le numéro maximal dans la prochaine fonction ()
Donc, une graine ne fait rien ?!
Dépend de la manière dont vous allez mettre en œuvre au hasard dans votre code, mais c'est ainsi que je l'utilise, vous pouvez trouver plus d'informations à ce sujet ici: docs.oracle.com/javase/8/docs/api/java/util/random.html
Ce serait une meilleure réponse s'il explique pourquoi le code fourni fonctionne. Simplement écrire le code de quelqu'un pour eux peut aider l'affiche de la question, mais cela ne fait pas grand chose pour aider les autres lecteurs.
Vous utilisez la même graine dans votre constructeur aléatoire. Ne faites pas cela et utilisez plutôt le constructeur par défaut si vous voulez que le résultat soit différent