Maison > Java > javaDidacticiel > Pourquoi est-ce que je continue à obtenir les mêmes nombres aléatoires en Java lorsque j'utilise une graine ?

Pourquoi est-ce que je continue à obtenir les mêmes nombres aléatoires en Java lorsque j'utilise une graine ?

Barbara Streisand
Libérer: 2024-11-09 13:00:03
original
770 Les gens l'ont consulté

Why Do I Keep Getting the Same Random Numbers in Java When Using a Seed?

Génération de nombres aléatoires Java avec une graine : débogage d'une sortie identique

En Java, la classe Random fournit un moyen de générer des nombres pseudo-aléatoires. En spécifiant une graine comme argument, il est possible de contrôler la séquence de nombres générés. Cependant, un problème survient lorsque la même graine est utilisée à plusieurs reprises, ce qui entraîne des séquences de nombres identiques.

Comprendre la génération de nombres pseudo-aléatoires et les graines

Un générateur de nombres pseudo-aléatoires (PRNG) est un algorithme qui génère une séquence de nombres qui semble aléatoire mais qui est en réalité déterminée par un petit ensemble de valeurs initiales, connu sous le nom de graine. En spécifiant une graine, le PRNG produit à chaque fois la même séquence de nombres.

Ajuster le code pour générer des séquences variées

Pour résoudre le problème de sortie identique, il est nécessaire de comprendre le fonctionnement des graines dans les PRNG. En Java, lors de l'appel de la classe Random avec un argument seed, elle conserve le même état pour les appels futurs, conduisant à la même séquence de nombres.

Pour générer des séquences variées, il est recommandé d'appeler l'argument zéro constructeur de Random, qui utilise le système nanotime comme graine. Cela garantit qu'une graine différente est utilisée à chaque fois que la méthode est appelée.

Correction du code

Le code Java corrigé suivant utilise le constructeur sans argument pour générer différentes séquences de nombres aléatoires :

private Random generator = new Random();

double randomGenerator() {
    return generator.nextDouble() * 0.5;
}
Copier après la connexion

En déplaçant l'instance Random en dehors de la méthode et en utilisant le système nanotime comme graine, ce code élimine le problème d'une sortie identique et génère différentes séquences de 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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal