JAvaの乱数生成方式1:Random.nextInt()
4909 ワード
JAvaで乱数を生成する方法の1:
Java.util.Randomツールクラスを使用すると、jdk 1.8を例に乱数を生成できます.
1、Randomオブジェクトの作成
まずRandomの構造方法を見てみましょう
関連するソースコードを見てみましょう.
Java.util.Randomツールクラスを使用すると、jdk 1.8を例に乱数を生成できます.
1、Randomオブジェクトの作成
まずRandomの構造方法を見てみましょう
//
public Random(){}
//
public Random(long seed){}
関連するソースコードを見てみましょう.
/**
* Creates a new random number generator. This constructor sets
* the seed of the random number generator to a value very likely
* to be distinct from any other invocation of this constructor.
*/
public Random() {
this(seedUniquifier() ^ System.nanoTime());
}
/**
* Creates a new random number generator using a single {@code long} seed.
* The seed is the initial value of the internal state of the pseudorandom
* number generator which is maintained by method {@link #next}.
*
* The invocation {@code new Random(seed)} is equivalent to:
*
{@code
* Random rnd = new Random();
* rnd.setSeed(seed);}
*
* @param seed the initial seed
* @see #setSeed(long)
*/
public Random(long seed) {
if (getClass() == Random.class)
this.seed = new AtomicLong(initialScramble(seed));
else {
//subclass might have overriden setSeed
this.seed = new AtomicLong();
setSeed(seed);
}
}
ソースコードから できる は のとおりです.
パラメトリック では、
Random()オブジェクトを すると、シードとして が され、このシードを して しい が されます.この は、 のシステム のナノ と の ミリ の の である【this(seedUniquifier)^System.nanoTime()】
パラメトリック では、
の によれば
1:
Random rd1 = new Random(10);
の に
2:
Random rd2 = new Random();
rd.nextInt(10);
ただし、 のテストでは、それほど ではありませんので、 3タイトルの の を してください.
2、Randomオブジェクトの に する
Randomクラスでは、ランダムな を する は のとおりです. /**
* ...
* @return the next pseudorandom, uniformly distributed {@code int}
* value from this random number generator's sequence
*/
public int nextInt() {
return next(32);
}
/**
* ...
* @param bound the upper bound (exclusive). Must be positive.
* @return the next pseudorandom, uniformly distributed {@code int}
* value between zero (inclusive) and {@code bound} (exclusive)
* from this random number generator's sequence
* @throws IllegalArgumentException if bound is not positive
* @since 1.2
*/
public int nextInt(int bound) {
if (bound <= 0)
throw new IllegalArgumentException(BadBound);
int r = next(31);
int m = bound - 1;
if ((bound & m) == 0) // i.e., bound is a power of 2
r = (int)((bound * (long)r) >> 31);
else {
for (int u = r;
u - (r = u % bound) + m < 0;
u = next(31))
;
}
return r;
}
nextInt()とnextInt(int)の の を いて を することができる.
しかし、それらの2つの の いは
Random ra=new Random()とします.
ra.nextInt() のランダム ( と を む)が されます.
ra.nextInt(int) [0,9]の の の が されます
テストコードは のとおりです.public class TestRandomConstructor {
public static void main(String[] args) {
System.out.println("========================= nextInt(10) ================");
Random rd1 = new Random();
for (int i = 0; i < 20; i++) {
System.out.println(rd1.nextInt(10));
}
System.out.println("========================= nextInt() ================");
for (int i = 0; i < 20; i++) {
System.out.println(rd1.nextInt());
}
}
}
テスト :========================= nextInt(10) ================
7
7
8
1
8
2
7
6
1
0
...
========================= nextInt() ================
439364996
1142968751
-1245259674
-896549010
-1870260620
1931734780
1153394322
-1781928093
....
3、その の
Random ra = new Random(10);
テストコード:public class TestRandomConstructor {
public static void main(String[] args) {
System.out.println("========================= nextInt(10) ================");
Random rd1 = new Random(10);
for (int i = 0; i < 20; i++) {
System.out.println(rd1.nextInt(10));
}
System.out.println("========================= nextInt() ================");
for (int i = 0; i < 20; i++) {
System.out.println(rd1.nextInt());
}
}
}
テスト :========================= nextInt(10) ================
3
0
3
0
6
6
7
8
1
4
3
8
......
========================= nextInt() ================
35545786
-347474078
1892459190
498897016
134578271
-1339421797
-331953347
772426541
1684007666
......
にはrandom.nextInt(10)が に される を することができます
Random ra=new Random(10);
この はみんなを けることができることを みます. いがあれば、 えてください.
もし さんが の や い があれば、 えてください. んでくれてありがとう.