Maison  >  Article  >  Java  >  Comment résoudre le problème des semences dans la classe Java Random

Comment résoudre le problème des semences dans la classe Java Random

王林
王林avant
2023-05-03 19:37:041452parcourir

On peut dire que dans les langages informatiques actuels et les utilisateurs ordinaires, il n'existe aucun moyen d'obtenir de vrais nombres aléatoires. Les vrais nombres aléatoires ne sont désormais disponibles que dans les ordinateurs quantiques.

Ainsi, les nombres aléatoires dont nous parlons maintenant peuvent également être appelés nombres pseudo-aléatoires. Les nombres pseudo-aléatoires sont le résultat obtenu grâce à un algorithme et combiné avec le prochain nombre qui change régulièrement (comme l'heure).

Nous appelons ce type de données collectées via un algorithme le temps comme base pour obtenir initialement des nombres aléatoires comme graine.

Il existe deux manières de créer des nombres aléatoires en Java :

La première consiste à créer directement un objet Random

Random random = new Random();

Cette méthode sera appelée en bas pour obtenir la graine :

Comment résoudre le problème des semences dans la classe Java Random

La seconde consiste à ajouter vous-même Passez la graine créée dans :

Random random = new Random(5);

Comment résoudre le problème des semences dans la classe Java Random

Dans le code source, on peut voir directement que le type de données de la graine est long, ce qui est un entier long.

Nous avons donc maintenant un moyen d'obtenir la graine qu'il a générée lors de la première génération de l'objet Random, puis de transmettre la graine obtenue dans l'objet qui a créé le Random. Est-il possible d'obtenir le même nombre aléatoire que ci-dessus ?

Utilisez d'abord le langage java pour l'implémenter :

import java.util.Random;

public class Demo02 {
    public static void main(String[] args) {
        Random random = new Random(5);//在这将5作为种子传入
        System.out.println("第一次调用:");
        for (int i = 0; i < 5; i++) {
            System.out.print(random.nextInt(10) + "\t");
            //获得10以内的随机数(不包括10)
        }
        random.setSeed(5);//在这再将种子5传入Random的种子当中
        System.out.println("\n第二次调用:");
        for (int i = 0; i < 5; i++) {
            System.out.print(random.nextInt(10) + "\t");
        }
    }
}

Comment résoudre le problème des semences dans la classe Java Random

Il est évident à partir de là que ce nombre aléatoire n'est pas du tout aléatoire. Tant que la graine est la même deux fois, le même résultat sera renvoyé.

Ici, j'utilise le langage python pour implémenter à nouveau cette fonction (principalement parce qu'il n'existe aucune méthode en Java qui puisse appeler la sortie de la graine actuelle). Utilisez Python pour avoir une meilleure compréhension.

J'écrirai des commentaires plus détaillés en python, et les détails ne seront pas difficiles à comprendre.

import random  #导入random内库
x = random.getstate()  # 获得当前random里的种子
print(&#39;第一次循环:&#39;) #输入语句
for i in range(5):
    #for循环  for i in range(5)  ===》 for (int i = 0; i < 5; i++)
    #在python里面并没哟什么大括号去吧什么括起来,而是要注意锁定,一个锁定就是一个整体
    print(random.randint(1, 10), end=&#39;\t&#39;)
    #random.randint(1, 10)生成1~10(不包括10)的随机数,
    # end=&#39;\t&#39;表示当前print没有结束,还有一个制表符的键位,也就不换行了
print(&#39;\n第二次循环&#39;)
random.setstate(x)#将上面获得的种子再次传入进去
for i in range(5): #这里和上面一样,循环出5次
    print(random.randint(1, 10), end=&#39;\t&#39;)

Comment résoudre le problème des semences dans la classe Java Random

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer