Maison  >  Article  >  Java  >  Comment générer des nombres aléatoires non déterministes en Java lors de l'utilisation d'une graine fixe ?

Comment générer des nombres aléatoires non déterministes en Java lors de l'utilisation d'une graine fixe ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-11 10:18:03772parcourir

How to Generate Non-Deterministic Random Numbers in Java When Using a Fixed Seed?

Génération de nombres aléatoires avec une graine fixe en Java

Lors de la génération de nombres aléatoires à l'aide d'une graine, il est essentiel de comprendre comment les graines influencent le caractère aléatoire . En fournissant la même graine comme argument à un objet Random, la séquence de nombres générée sera reproductible et déterministe. Il s'agit d'une fonctionnalité souhaitable pour les tests unitaires ou la réplication de scénarios spécifiques.

Le code fourni utilise une graine fixe pour créer un objet Random. Cela garantit que chaque fois que 100 nombres sont générés avec la même graine, ils seront identiques. Pour résoudre ce problème et générer différentes séquences, envisagez les approches suivantes :

  1. Supprimer l'argument Seed :
    Appel du constructeur sans argument de Random, qui utilise le nanotime actuel en tant que graine, permet différentes valeurs de graine à chaque invocation.
  2. Générer des graines aléatoires :
    Si le véritable caractère aléatoire est crucial, utilisez d'autres sources comme les UUID ou un générateur de nombres aléatoires sécurisé ( par exemple, java.security.SecureRandom) pour générer la graine de manière dynamique.
  3. Conserver l'instance aléatoire à l'extérieur :
    Créez une seule instance aléatoire en dehors de la méthode et réutilisez-la pour générer tous les nombres aléatoires . Cela garantit que la graine n'est définie qu'une seule fois et que les appels suivants à randomGenerator() utilisent la même graine.

Par exemple, le code ci-dessous modifie le code fourni pour implémenter la première approche :

private Random generator = new Random();
double randomGenerator() {
    return generator.nextDouble() * 0.5;
}

En supprimant l'argument seed, ce code génère différentes séquences de nombres aléatoires à chaque invocation. N'oubliez pas que le caractère aléatoire déterministe est important pour les tests et la cohérence. Le véritable caractère aléatoire peut être souhaitable dans certains cas d'utilisation, alors choisissez l'approche qui correspond le mieux à vos besoins.

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