Heim  >  Artikel  >  Java  >  So lösen Sie das Seed-Problem in der Java Random-Klasse

So lösen Sie das Seed-Problem in der Java Random-Klasse

王林
王林nach vorne
2023-05-03 19:37:041452Durchsuche

Man kann sagen, dass es in aktuellen Computersprachen und bei normalen Benutzern keine Möglichkeit gibt, echte Zufallszahlen zu erhalten. Echte Zufallszahlen gibt es mittlerweile nur noch in Quantencomputern.

Die Zufallszahlen, über die wir jetzt sprechen, können also auch als Pseudozufallszahlen bezeichnet werden. Sie werden durch einen Algorithmus ermittelt und mit dem Ergebnis der nächsten sich regelmäßig ändernden Zahl (z. B. der Zeit) kombiniert.

Diese durch den Algorithmus gesammelten Daten nennen wir Zeit als Grundlage, um zunächst Zufallszahlen als Seed zu erhalten.

Es gibt zwei Möglichkeiten, Zufallszahlen in Java zu erstellen:

Die erste Möglichkeit besteht darin, direkt ein Zufallsobjekt zu erstellen

Random random = new Random();

Es wird erledigt unten Rufen Sie diese Methode auf, um den Startwert zu erhalten:

So lösen Sie das Seed-Problem in der Java Random-Klasse

Die zweite besteht darin, den von Ihnen erstellten Startwert zu übergeben:

Random random = new Random(5);

#🎜 🎜#So lösen Sie das Seed-Problem in der Java Random-Klasse

Im Quellcode können wir direkt sehen, dass der Datentyp des Startwerts lang ist, also eine lange Ganzzahl.

Wir haben jetzt also eine Möglichkeit, den generierten Startwert abzurufen, wenn zum ersten Mal ein Zufallsobjekt generiert wird, und den erhaltenen Startwert dann an das Objekt weiterzuleiten, das den Zufall erstellt. Ist es möglich, die gleiche Zufallszahl wie oben zu erhalten?

Verwenden Sie zuerst die Java-Sprache, um es zu implementieren:

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");
        }
    }
}

So lösen Sie das Seed-Problem in der Java Random-Klasse

Von hier aus ist es offensichtlich, dass diese Zufallszahl nicht vorliegt alle Nicht zufällig. Solange der Startwert zweimal derselbe ist, wird das gleiche Ergebnis zurückgegeben.

Hier verwende ich die Python-Sprache, um diese Funktion erneut zu implementieren (hauptsächlich, weil es in Java keine Methode gibt, die die Ausgabe des aktuellen Seeds aufrufen kann). Verwenden Sie Python, um ein besseres Verständnis zu erhalten.

Ich werde detailliertere Kommentare in Python schreiben, und die Details werden nicht schwer zu verstehen sein.

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;)

So lösen Sie das Seed-Problem in der Java Random-Klasse

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Seed-Problem in der Java Random-Klasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen