現在のコンピュータ言語や一般ユーザーでは、真の乱数を取得する方法はないと言えます。真の乱数は現在、量子コンピューターでのみ利用可能です。
つまり、今話している乱数は、擬似乱数とも呼ばれることがあり、擬似乱数とは、アルゴリズムによって得られた結果を、次に規則的に変化する数値(時間など)と組み合わせたものです。
最初に乱数をシードとして取得するための基礎として、アルゴリズム時間を通じて収集されるこのデータを「ベース」と呼びます。
Java で乱数を作成するには 2 つの方法があります:
1 つ目は、Random オブジェクトを直接作成する方法です。
Random random = new Random();
このメソッドは最後に呼び出され、シード :
2 つ目は、作成したシードを渡すことです:
Random random = new Random(5);
ソース コード内で直接実行できます。シードのデータ型はlong、つまり長整数であることがわかります。
これで、最初に Random オブジェクトを生成するときに生成されるシードを取得し、取得したシードを Random を作成したオブジェクトに渡す方法ができました。上記と同じ乱数を取得することは可能でしょうか?
最初に Java 言語を使用して実装します。
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"); } } }
ここから、この乱数がまったくランダムではないことが明らかです。シードが 2 回同じである限り、同じ結果が返されます。
ここでは、Python 言語を使用してこの関数を再度実装します (主に、Java には現在のシードの出力を呼び出すことができるメソッドがないため)。より深く理解するにはPythonを使用してください。
Python でさらに詳しいコメントを書いていきますが、内容は難しくありません。
rreeee以上がJava Random クラスのシード問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。