logo

Javaで乱数を生成する方法

ジャワ プログラミングでは、多くの場合、 乱数を生成する アプリケーションを開発している間。多くのアプリケーションには、 ランダムに数値を生成する 、ユーザーを確認するために、多くのアプリケーションが使用します。 OTP 。乱数の最も良い例はサイコロです。投げると 1 から 6 までの乱数が得られるからです。

このセクションでは、 乱数 そして で乱数を生成する方法 ジャワ

乱数

乱数は、多数の数値を使用し、数学的アルゴリズムを使用して数値を選択する数値です。次の 2 つの条件を満たします。

  • 生成された値は一定の間隔にわたって均一に分布します。
  • 現在および過去の価値に基づいて将来の価値を推測することは不可能です。

Java での乱数の生成

Java では、メソッドとクラスを使用して乱数を生成する 3 つの方法があります。

  • を使用して、 ランダム() 方法
  • を使用して、 ランダム クラス
  • を使用して、 スレッドローカルランダム クラス
  • を使用して、 ints() メソッド (Java 8 の場合)

Math.random() メソッドの使用

ジャワ 数学 クラスには、さまざまな数学演算のためのメソッドが多数あります。そのうちの 1 つは、 ランダム() 方法。それは 静的 Math クラスのメソッド。それを直接呼び出すことができます。のみ生成します ダブル 乱数を入力する 0.0以上 そして 1.0未満 。 random() メソッドを使用する前に、java.lang.Mathクラス。

構文:

 public static double random() 

パラメータは受け付けません。 0.0 以上 1.0 未満の擬似乱数 double を返します。

random() メソッドを使用して乱数を生成するプログラムを作成してみましょう。

RandomNumberExample1.java

 import java.lang.Math; public class RandomNumberExample1 { public static void main(String args[]) { // Generating random numbers System.out.println('1st Random Number: ' + Math.random()); System.out.println('2nd Random Number: ' + Math.random()); System.out.println('3rd Random Number: ' + Math.random()); System.out.println('4th Random Number: ' + Math.random()); } } 

出力:

接続を取得する
 1st Random Number: 0.17434160924512265 2nd Random Number: 0.4297410090709448 3rd Random Number: 0.4828656381344487 4th Random Number: 0.13267917059488898 

覚えて: プログラムを実行すると、毎回異なる出力が得られます。実際の出力は上記の出力と異なる場合があります。

指定した範囲内で乱数を生成したい場合は、次の式を使用することもできます。

 Math.random() * (max - min + 1) + min 

上の式では、最小値は含まれますが、最大値は含まれません。

200から400までの乱数を生成するプログラムを作成してみましょう。

RandomNumberExample2.java

 public class RandomNumberExample2 { public static void main( String args[] ) { int min = 200; int max = 400; //Generate random double value from 200 to 400 System.out.println('Random value of type double between '+min+' to '+max+ ':'); double a = Math.random()*(max-min+1)+min; System.out.println(a); //Generate random int value from 200 to 400 System.out.println('Random value of type int between '+min+' to '+max+ ':'); int b = (int)(Math.random()*(max-min+1)+min); System.out.println(b); } } 

出力 1:

 Random value of type double between 200 to 400: 233.88329802655377 Random value of type int between 200 to 400: 329 

成果 2:

 Random value of type double between 200 to 400: 254.8419979875385 Random value of type int between 200 to 400: 284 

ランダムクラスの使用

乱数を生成する別の方法は、 ジャワ ランダム クラスjava.utilパッケージ。擬似乱数のストリームを生成します。 integer、float、double、Boolean、long など、あらゆるデータ型の乱数を生成できます。このクラスを使用して乱数を生成する場合は、以下の手順に従います。

  • まずクラスをインポートしますjava.lang.ランダム
  • を作成します 物体 ランダムクラスの。
  • 次のいずれかのメソッドを呼び出します。
  • nextInt(int バウンド) nextInt() nextFloat() nextDouble() nextLong() nextBoolean()

上記のすべてのメソッドは、この乱数発生器のシーケンスから次の擬似乱数の均一に分散された値 (対応するメソッド) を返します。の nextDouble() そして nextFloat() このメソッドは、0.0 ~ 1.0 の間のランダムな値を生成します。

nextInt(int バウンド) メソッドは、正の値である必要があるパラメータ境界 (上限) を受け入れます。 0 からbound-1 の範囲の乱数を生成します。

Random クラスを使用して乱数を生成するプログラムを作成してみましょう。

数学クラスJava

RandomNumberExample3.java

 import java.util.Random; public class RandomNumberExample3 { public static void main(String args[]) { // creating an object of Random class Random random = new Random(); // Generates random integers 0 to 49 int x = random.nextInt(50); // Generates random integers 0 to 999 int y = random.nextInt(1000); // Prints random integer values System.out.println('Randomly Generated Integers Values'); System.out.println(x); System.out.println(y); // Generates Random doubles values double a = random.nextDouble(); double b = random.nextDouble(); // Prints random double values System.out.println('Randomly Generated Double Values'); System.out.println(a); System.out.println(b); // Generates Random float values float f=random.nextFloat(); float i=random.nextFloat(); // Prints random float values System.out.println('Randomly Generated Float Values'); System.out.println(f); System.out.println(i); // Generates Random Long values long p = random.nextLong(); long q = random.nextLong(); // Prints random long values System.out.println('Randomly Generated Long Values'); System.out.println(p); System.out.println(q); // Generates Random boolean values boolean m=random.nextBoolean(); boolean n=random.nextBoolean(); // Prints random boolean values System.out.println('Randomly Generated Boolean Values'); System.out.println(m); System.out.println(n); } } 

出力:

 Randomly Generated Integers Values 23 767 Randomly Generated Double Values 0.37823814494212016 0.998058172671956 Randomly Generated Float Values 0.87804186 0.93880254 Randomly Generated Long Values -4974823544291679198 3650240138416076693 Randomly Generated Boolean Values false true 

ThreadLocalRandom クラスの使用

スレッドローカルランダム クラスはで定義されていますjava.util.concurrentパッケージ。これは、Math クラスのランダム ジェネレーターと同じ、内部生成されたシードで初期化されます。変更することはできません。このクラスは次のように使用できます。

 ThreadLocalRandom.current().nextX(...) 

ここで、X は Int、Long などです。

注: ThreadLocalRandom を複数のスレッドと誤って共有することはできません。

integer、float、double、Boolean、long など、あらゆるデータ型の乱数を生成できます。このクラスを使用して乱数を生成する場合は、以下の手順に従います。

  • まず、次を使用してクラスをインポートします。java.util.concurrent.ThreadLocalRandom
  • ランダムに数値を生成したい対応するメソッドを呼び出します。
  • nextInt() nextDouble() nextLong() nextFloat() nextBoolean()

上記のすべてのメソッドは、Random クラスの対応するメソッドをオーバーライドし、対応する値を返します。

    nextInt(int バウンド) nextDouble(int バウンド) nextLong(int バウンド)

上記のメソッドはパラメータを解析します バウンド (上)それはそうでなければなりません ポジティブ 。 0 (両端を含む) から指定された境界 (両端を含まない) までの、対応するランダムに生成された値を返します。投げる 不正な引数例外 境界が負の場合。

    nextInt(int 原点、int バウンド) nextDouble(int 原点、int バウンド) nextLong(int 原点、int バウンド)

上記のメソッドは 2 つのパラメータを解析します 起源 そして バウンド 。原点は、 最小値 が返され、境界は 上界 。指定された起点 (これを含む) と境界 (これを含まない) の間で、対応するランダムに生成された値を返します。また、投げます 不正な引数例外 原点が境界以上である場合。

を使用して乱数を生成するプログラムを作成しましょう。 ThreadLocalRandom クラス

RandomNumberExample4.java

 import java.util.concurrent.ThreadLocalRandom; public class RandomNumberExample4 { public static void main(String args[]) { // Generate random integers between 0 to 999 int a = ThreadLocalRandom.current().nextInt(); int b = ThreadLocalRandom.current().nextInt(); // Print random integer values System.out.println('Randomly Generated Integer Values:'); System.out.println(a); System.out.println(b); // Generate Random double values double c = ThreadLocalRandom.current().nextDouble(); double d = ThreadLocalRandom.current().nextDouble(); // Print random doubles System.out.println('Randomly Generated Double Values:'); System.out.println(c); System.out.println(d); // Generate random boolean values boolean e = ThreadLocalRandom.current().nextBoolean(); boolean f = ThreadLocalRandom.current().nextBoolean(); // Print random Booleans System.out.println('Randomly Generated Boolean Values:'); System.out.println(e); System.out.println(f); } } 

出力 1:

 Randomly Generated Integer Values: 348534891 -1887936727 Randomly Generated Double Values: 0.15644440033119833 0.5242730752133399 Randomly Generated Boolean Values: true true 

成果 2:

 Output 2: Randomly Generated Integer Values: 402755574 295398333 Randomly Generated Double Values: 0.4856461791062565 0.5148677091077654 Randomly Generated Boolean Values: false true 

同様に、他の方法も使用できます。 ThreadLocalRandomクラス

Java 8 での乱数生成

Java 8 では、新しいメソッド ints() が ランダムクラス 。をインポートする必要がありますjava.util.ランダムメソッドを使用する前に。

ints():

疑似乱数の int 値は、 nextInt() メソッドの呼び出しと同じように生成されます。擬似乱数の int 値の無制限のストリームを返します。

ints(長いストリームサイズ):

メソッドはパラメータを解析します ストリームサイズ ロングタイプ。生成する値の数を指定します。疑似乱数の int 値は、 nextInt() メソッドの呼び出しと同じように生成されます。また、ランダムに生成された int 値のストリームも返します。投げる IllegalArgumentException ストリーム サイズがゼロ未満の場合。

ints(long streamSize、intrandomNumberOrigin、intrandomNumberBound):

C++での継承

パラメーター:

    ストリームサイズ:生成する値の数。ランダム番号の原点:各ランダム値の由来ランダム数値境界:各ランダム値の境界

指定された原点と境界を持つ疑似乱数の int 値のストリームを返します。投げる IllegalArgumentException もし:

  • ストラムサイズ<0< li>
  • 原点 > = 境界
 ints(int randomNumberOrigin, int randomNumberBound): 

パラメーター:

ランダム番号の原点:各ランダム値の由来ランダム数値境界:各ランダム値の境界

指定された原点と境界を持つ疑似乱数の int 値の無制限のストリームを返します。投げる IllegalArgumentException 原点が境界以上である場合。

同様に、long 型と double 型のストリームを生成することもできます。 ロングス() そして ダブルス() それぞれ方法。

次を使用して整数のストリームを生成するプログラムを作成しましょう。 ints() Random クラスのメソッド。

RandomNumberExample5.java

 import java.util.Random; public class RandomNumberExample5 { public static void main(String[] args) { randomInts(5); randomInts(9, 50, 90); //getStreamOfRandomInts(30, 50); } //method that generates a stream of integers having size 5 public static void randomInts(int num) { Random random = new Random(); random.ints(num).forEach(System.out::println); } //method that generates a stream of 9 integers between 50 to 90 public static void randomInts(int num, int origin, int bound) { Random random1 = new Random(); random1.ints(num, origin, bound).forEach(System.out::println); } } 

出力 1:

 727900357 -1073118456 306279822 370327182 1366265119 65 75 75 88 76 75 56 86 85 

成果 2:

 -1338107947 -1698771421 594232770 -1224937976 -1625069815 56 69 67 87 64 52 72 75 76