-1
votes

En utilisant une classe aléatoire mais ma variable n'est pas aléatoire?

 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?

1 commentaires

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


3 Réponses :


1
votes

Vous semez le rng avec une constante en appelant ... = nouveau aléatoire (1000); . Avec la même graine, on obtiendra toujours la même séquence de "nombres aléatoires". Ne pas graine ( ... = nouveau aléatoire (); ), et les valeurs doivent être "aléatoires".

Un commentaire sur le hasard et la programmation:

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 .


1 commentaires

Beaucoup de réponses dans le duplicata sont un peu plus détaillées



1
votes

Rand Rand = Nouveauté aléatoire (1000); 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.

Si vous voulez des valeurs différentes pour chaque exécution, utilisez Rand Rand = nouveau aléatoire (); à la place.


0 commentaires

-2
votes

Essayez d'utiliser ce code pour obtenir des numéros aléatoires: xxx

Ce code vous apportera des valeurs aléatoires comprises entre 0 et 1000


5 commentaires

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.