JAvaの乱数生成方式1:Random.nextInt()

4909 ワード

JAvaで乱数を生成する方法の1:
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); 
 
この はみんなを けることができることを みます. いがあれば、 えてください.                                                           
もし さんが の や い があれば、 えてください. んでくれてありがとう.