ホームページ  >  記事  >  Java  >  Java Random クラスのシード問題を解決する方法

Java Random クラスのシード問題を解決する方法

王林
王林転載
2023-05-03 19:37:041452ブラウズ

現在のコンピュータ言語や一般ユーザーでは、真の乱数を取得する方法はないと言えます。真の乱数は現在、量子コンピューターでのみ利用可能です。

つまり、今話している乱数は、擬似乱数とも呼ばれることがあり、擬似乱数とは、アルゴリズムによって得られた結果を、次に規則的に変化する数値(時間など)と組み合わせたものです。

最初に乱数をシードとして取得するための基礎として、アルゴリズム時間を通じて収集されるこのデータを「ベース」と呼びます。

Java で乱数を作成するには 2 つの方法があります:

1 つ目は、Random オブジェクトを直接作成する方法です。

Random random = new Random();

このメソッドは最後に呼び出され、シード :

Java Random クラスのシード問題を解決する方法

2 つ目は、作成したシードを渡すことです:

Random random = new Random(5);

Java Random クラスのシード問題を解決する方法

ソース コード内で直接実行できます。シードのデータ型は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");
        }
    }
}

Java Random クラスのシード問題を解決する方法

ここから、この乱数がまったくランダムではないことが明らかです。シードが 2 回同じである限り、同じ結果が返されます。

ここでは、Python 言語を使用してこの関数を再度実装します (主に、Java には現在のシードの出力を呼び出すことができるメソッドがないため)。より深く理解するにはPythonを使用してください。

Python でさらに詳しいコメントを書いていきますが、内容は難しくありません。

rreeee

Java Random クラスのシード問題を解決する方法

以上がJava Random クラスのシード問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。