Maison  >  Article  >  Java  >  Pourquoi la définition de la valeur de départ dans le générateur de nombres aléatoires de Java entraîne-t-elle des sorties répétées ?

Pourquoi la définition de la valeur de départ dans le générateur de nombres aléatoires de Java entraîne-t-elle des sorties répétées ?

DDD
DDDoriginal
2024-11-12 19:04:02336parcourir

Why Does Setting the Seed in Java's Random Number Generator Result in Repeated Outputs?

Résoudre le problème de la génération répétitive de nombres aléatoires en Java avec Set Seed

Description du problème :

En implémentant un générateur de nombres aléatoires, les développeurs peuvent rencontrer une situation dans laquelle l'appel de la méthode des nombres aléatoires, malgré la définition de la valeur de départ, génère continuellement le même résultat.

Exemple de code :

Considérez l'extrait de code suivant :

class Numbers {
    public int random(int i) {
        Random randnum = new Random();
        randnum.setSeed(123456789);
        return randnum.nextInt(i);
    }
}

Lorsque vous appelez number.random(10) plusieurs fois, il renvoie de manière persistante un nombre identique, tel que 5, au lieu de sorties différentes.

Résolution :

Pour garantir la génération de nombres aléatoires uniques avec une graine prédéfinie, l'instance Random() doit être partagée dans toute la classe. Ceci peut être réalisé grâce à la modification de code suivante :

class Numbers {
    Random randnum;

    public Numbers() {
        randnum = new Random();
        randnum.setSeed(123456789);
    }

    public int random(int i) {
        return randnum.nextInt(i);
    }
}

En initialisant l'instance randnum dans le constructeur de classe, elle devient une ressource partagée accessible à toutes les méthodes de la classe. Cela garantit que la graine n'est définie qu'une seule fois et que les appels ultérieurs à la méthode random() génèrent différents nombres aléatoires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn