Générateur de nombres aléatoires Java : pourquoi toujours le même résultat avec Set Seed ?
En Java, lorsque vous utilisez la classe Random pour générer des nombres aléatoires , il n'est pas rare de rencontrer des situations dans lesquelles la définition d'une graine donne systématiquement le même résultat. Examinons le problème et explorons une solution efficace.
Considérez l'extrait de code suivant :
public int random(int i){ Random randnum = new Random(); randnum.setSeed(123456789); return randnum.nextInt(i); }
Lorsqu'elle est appelée plusieurs fois depuis une autre classe, cette méthode devrait idéalement fournir des nombres aléatoires distincts. Cependant, il renvoie systématiquement le même résultat, tel que « 5 » lorsqu'il est invoqué avec number.random(10).
Le coupable derrière ce comportement réside dans la création d'une nouvelle instance Random au sein de la méthode aléatoire. Chaque nouvelle instance utilise un générateur de graines différent, ce qui donne lieu à une séquence prévisible de nombres. Pour remédier à ce problème, l'instance Random doit être partagée dans toute la classe.
public class Numbers { Random randnum; public Numbers() { randnum = new Random(); randnum.setSeed(123456789); } public int random(int i){ return randnum.nextInt(i); } }
Maintenant, avec l'instance Random partagée, plusieurs invocations de la méthode random généreront des nombres véritablement aléatoires, même avec une graine définie. . La graine sert de point de départ au générateur de nombres aléatoires, garantissant la cohérence entre plusieurs exécutions tout en conservant l'élément aléatoire prévu.
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!