乱数 シミュレーション ゲーム セキュリティなどのプログラミングで広く使用されています。Java の組み込みメソッドとクラスを使用して乱数を生成する方法は複数あります。最も一般的に使用されるアプローチを以下に示します。
- java.util.Randomクラス
- Math.random() メソッド (double 値を返す)
- ThreadLocalRandom クラス (Java 7 で導入)
これらのアプローチを 1 つずつ詳しく見てみましょう
1. java.util.Randomの使用
このクラスを利用すると、さまざまなタイプ (int double long boolean など) の乱数を生成できます。
主な方法:
- nextInt(): このメソッドはランダムな整数 (負の値を含む全範囲) を生成します。
- nextInt(int バウンド): このメソッドは、0 (両端を含む) から境界 (両端を含まない) までのランダムな整数を生成します。
- nextDouble(): このメソッドは、0.0 (両端を含む) と 1.0 (両端を含まない) の間のランダムな double を生成します。
- nextBoolean(): ランダムな真か偽
例 :
Java// Generating random number using java.util.Random; import java.util.Random; public class Geeks{ public static void main(String[] args) { // Creating the instance of Random class Random r= new Random(); // Generate random integers in range 0 to 999 int r1 = r.nextInt(1000); int r2 = r.nextInt(1000); // Printing random integers System.out.println('Random Integers: ' + r1); System.out.println('Random Integers: ' + r2); // Generate random doubles double rd1 = r.nextDouble(); double rd2 = r.nextDouble(); // Printing random doubles System.out.println('Random Doubles: ' + rd1); System.out.println('Random Doubles: ' + rd2); } }
出力
Random Integers: 39 Random Integers: 190 Random Doubles: 0.4200728082969115 Random Doubles: 0.9327571841228275
特定の範囲の数値を生成する
特定の範囲の乱数を生成する式を以下に示します。
ランダム ランド = new Random();
intrandomNum = rand.nextInt(max - min + 1) + min;
注記: min と max は数値の下限と上限です。
例:
Java// Generating random number in a specific range import java.io.*; import java.util.*; class Geeks { public static void main (String[] args) { Random r = new Random(); int max=100min=50; System.out.println('Generated numbers are within '+ min +' to '+ max); System.out.println(r.nextInt(max - min + 1) + min); System.out.println(r.nextInt(max - min + 1) + min); System.out.println(r.nextInt(max - min + 1) + min); } }
出力
Generated numbers are within 50 to 100 55 51 51
2. Math.random() の使用
の 数学の授業 には、べき乗対数の計算など、さまざまな数値演算を実行するためのさまざまなメソッドが含まれています。これらのメソッドの 1 つは次のとおりです。 ランダム() このメソッドは、0.0 以上 1.0 未満の正の符号が付いた double 値を返します。戻り値は擬似ランダムに選択されます。このメソッドは Double タイプの乱数のみを生成できます。
例:
Java// Java program to demonstrate working of // Math.random() to generate random numbers import java.util.*; public class Geeks { public static void main(String args[]) { // Generating random doubles System.out.println('Random doubles: ' + Math.random()); System.out.println('Random doubles: ' + Math.random()); } }
出力
Random doubles: 0.38601320746656065 Random doubles: 0.9209882942481417
特定の範囲の数値を生成する
特定の範囲の乱数を生成する式は次のとおりです。最小値と最大値は数値の下限値と上限値です。
int randomNum = min + (int)(Math.random() * ((max - min) + 1));
例:
Java// Demonstrating how to generate random // number within a specific range import java.io.*; import java.util.*; class Geeks { public static void main (String[] args) { int max=100min=50; System.out.println('Generated numbers are within '+min+' to '+max); System.out.println(min + (int)(Math.random() * ((max - min) + 1))); System.out.println(min + (int)(Math.random() * ((max - min) + 1))); System.out.println(min + (int)(Math.random() * ((max - min) + 1))); } }
出力
Generated numbers are within 50 to 100 82 68 77
3. ThreadLocalRandom の使用
これは競合を減らすため、マルチスレッド環境で推奨される方法です。
主な方法:
- current().nextInt(): ランダムな整数 (全範囲)
- current().nextInt(最小最大 + 1): 範囲内のランダムな整数 (この制限された例を追加しました)
- current().nextDouble(): ランダム倍精度 (0.0 ~ 1.0)
- current().nextBoolean(): ランダムな真か偽
例:
Java// Demonstrates how to generate random integers // doubles and booleans using ThreadLocalRandom import java.util.concurrent.ThreadLocalRandom; public class Geeks { public static void main(String[] args) { // Generate random integers in range 0 to 999 // Random number between 0 and 999 int r1 = ThreadLocalRandom.current().nextInt(1000); // Random number between 0 and 999 int r2 = ThreadLocalRandom.current().nextInt(1000); // Print random integers System.out.println('Random Integers: ' + r1); System.out.println('Random Integers: ' + r2); // Generate Random doubles between 0.0 (inclusive) // and 1.0 (exclusive) double rd1 = ThreadLocalRandom.current().nextDouble(); double rd2 = ThreadLocalRandom.current().nextDouble(); // Print random doubles System.out.println('Random Doubles: ' + rd1); System.out.println('Random Doubles: ' + rd2); // Generate random booleans boolean rb1 = ThreadLocalRandom.current().nextBoolean(); boolean rb2 = ThreadLocalRandom.current().nextBoolean(); // Print random Booleans System.out.println('Random Booleans: ' + rb1); System.out.println('Random Booleans: ' + rb2); } }
出力
Random Integers: 812 Random Integers: 461 Random Doubles: 0.7420865203902993 Random Doubles: 0.9580683365617423 Random Booleans: false Random Booleans: false